写点什么

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:281283
用户头像

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

关注

评论

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

let关键字的特点

bo

前端 ES6 7月月更

活动报名|揭露 Apache Doris 数据湖分析技术内幕?稀土开发者大会免费报名中!

SelectDB

数据库 数据湖 云原生 Doris 技术分享

王者荣耀商城异地多活架构

intelamd

如何设计业务异地多活架构 - 作业

阿拉阿拉幽幽

Web3流量聚合平台Starfish OS,给玩家元宇宙新范式体验

鳄鱼视界

数据散列算法

技术小生

7月月更 散列算法

【愚公系列】2022年7月 Go教学课程 014-运算符之算术运算符

愚公搬代码

7月月更

从去IOE到CIPU,中国云计算要走出自己的路径

B Impact

数据仓库和数据中台的关系

奔向架构师

数据仓库 7月月更

架构实战营模块 7 作业

Naoki

架构实战营

Okaleido tiger NFT即将登录Binance NFT平台,后市持续看好

小哈区块

网络水军为何如此猖獗:揭秘背后灰色利益链

石头IT视角

怎样才能让企业知识管理发挥出它的真正价值?

Baklib

【刷题记录】16. 最接近的三数之和

WangNing

7月月更

Spark Sql编译模块-词法、语法分析器Antlr4(一

飞哥

Java多线程之常见锁策略与CAS中的ABA问题

未见花闻

7月月更

如何搭建一个知识库网页?

Baklib

let's go——2022年读书活动招募书(第1期)

codists

vue.js 多种方式安装

恒山其若陋兮

7月月更

JavaScript小数点计算时失精问题

空城机

JavaScript 7月月更

一文解析Ansible配置管理文件

穿过生命散发芬芳

ansible 7月月更

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组题解

KEY.L

7月月更

更智能!AIRIOT加速煤炭行业节能减排升级

AIRIOT

低代码 物联网 低代码,项目开发

Docker安装Mycat中间件 | 实现主从&读写分离

宁在春

Docker 读写分离 mycat 7月月更

如何实现随叫随到的客户服务

Baklib

架构训练营模块七作业

融冰

8 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

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