写点什么

JRuby 1.0 里的 Unicode 状态和 Ruby 兼容性

  • 2007-04-10
  • 本文字数:862 字

    阅读完需:约 3 分钟

过去,JRuby 的字符串问题是一直是个难题。对于字符串,Ruby 使用字节数组表现;而 Java 则全面支持 Unicode 字符串,在内部表现为 UTF-16。由于这种差别,运行在 Ruby 上的代码如果要运行在 JRuby 上就可能会出现问题,正如 Charles O. Nutter 解释的那样:

但是 API 不符合 Ruby 应用程序的预期,经常将个别字符返回为 16bit 的值,并报告不正确的字符串字节长度,且无法将该字符串编码为全部由 8bit 的字符组成的字符串。只要 Ruby 代码涉及到这样的字符,就会出问题。

他继续描述了 JRuby1.0 中的解决方案: > 1. Ruby 字符串是 byte[] 类型且符合 Ruby 字符串语义。

  1. 传入 Ruby 代码的 Java 字符串将被编码为 UTF-8,这暗示了你应该在接收参数的代码中用 UTF-8 byte[] 来工作。
  2. Ruby 字符串传出到 Java 时也被假定为 UTF-8,Java 端调用的返回结果应该符合该假定。

调整字符串编码只是众多工作中的一个,为了达到与 Ruby 的完美兼容,还需要做许多单调乏味的工作。 一个相关的话题是在 JRuby 上支持 Ruby 正则表达式。简单的解决方案是直接用 java.util.regex——Java 中自带的正则表达式类库,来处理 Ruby 正则表达式。这个方案已经用了很长一段时间。可是,不断有不同的 Bug 报告进来,同时出于其他一些方面的考虑,我们觉得需要一个更好的解决方案。java.util.regex 的性能问题是众所周知的,而且在 JRuby 内部使用字节数组表示 Ruby 字符串会使性能问题更甚(java.util.regex 工作时不直接使用字节数组,因此需要先将 Ruby 字符串进行转换)。 因此,JRuby 的核心组成员 Ola Bini 决定直面困难,重新选择一个解决方案。他先选择了 JRegex 作为临时的替代解决方案,目前他正在致力于 REJ 方面的工作,这是他的描述: > REJ 是一个我已经启动的项目,它将成为 MRI 1.8.6 正则表达式引擎的直接端口。这一点很重要,因为这样 JRuby 的语义将与 MRI 紧密匹配。我们将能够匹配 UTF-8、SJIS 和 EUC 正则表达式等,并且我们将具有像 MRI 一样的特别功能,即使人们并不一定依赖于这样的特别功能。

到 2007 年 5 月,所有这些工作将确保 JRuby 1.0 尽可能地接近 Ruby。

2007-04-10 22:281270
用户头像

发布了 150 篇内容, 共 53.1 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

云服务器Flexus X实例:部署Gitea,拥有自己的Git仓库,管理本地代码

轶天下事

KubeEdge研讨会圆满举办,产学研共迎未来繁荣生态

华为云原生团队

云计算 容器 云原生 边缘计算

视频编辑软件Premiere Pro 2024 for Mac中文激活版

小玖_苹果Mac软件

Lightroom Classic 2025 for Mac中文激活版

小玖_苹果Mac软件

云端代码管理新体验,华为云Flexus X实例上GitLab部署与使用的实战指南

轶天下事

部署互联网操作系统Puter

轶天下事

《CPython Internals》阅读笔记:p1-p19

codists

用火语言RPA生成EXE界面应用客户端程序

火语言RPA

华为云Flexus X实例下的场景体验——小企业必备——JAVA环境搭建——保姆级教学

轶天下事

部署电子书阅读器Koodo Reader

轶天下事

Flexus云服务器X:Python安装的极致便捷之旅

轶天下事

云服务器Flexus X实例:轻量级http服务器Tinyhttpd部署

轶天下事

电机行业MES系统解决方案

万界星空科技

mes 万界星空科技mes 制造业工厂 电机行业 电机MES

多层级、全方位、立体化的车联网信息安全体系

芯盾时代

车联网 物联网 数据安全 智能汽车

AI技术开发虚拟老师

北京木奇移动技术有限公司

英语学习 AI教育 软件外包公司

AI 编程工具崛起,程序员的未来是否岌岌可危?

王中阳Go

#人工智能 #程序员 chatpt #AI编程

华为云X实例的镜像管理详解

轶天下事

探究MyBatis动态SQL的奥秘

代码忍者

淘宝商品详情数据获取API:深度技术解析与专业指南

代码忍者

时序数据库TDengine 签约智园数字,助力化工园区智联未来

TDengine

数据库 tdengine 时序数据库

构建数据库解决方案,基于华为云Flexus X实例容器化MySQL主从同步架构

轶天下事

部署多媒体流媒体平台Plex

轶天下事

JRuby 1.0里的Unicode状态和Ruby兼容性_Java_Werner Schuster_InfoQ精选文章