写点什么

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

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

关注

评论

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

ARTS第一周

壹贰叁

ARTS2334

okokabcd

Nginx No, Traefik Yes

newbe36524

25. matplotlib

茶桁

Python matplotlib

ARTS 打卡第 1 周

Johnson

ARTS 打卡计划

基于KEDA的Kubernetes自动缩放机制

俞凡

架构 Kubernetes 最佳实践 云原生

Nautilus Chain 主网上线拉开模块化序幕,一文纵览生态项目

威廉META

如何在SAM时代下打造高效的高性能计算大模型训练平台

GPU算力

代码随想录Day45 - 动态规划(七)

jjn0703

Presto 设计与实现(五):自动配置

冰心的小屋

数据湖 自动配置 presto 设计与实现

MySQL : 好好学习一下InnoDB中的页

java易二三

Java MySQL 数据库 程序员 计算机

ARTS 打卡第 1 周

Geek_wu

ARTS 打卡计划

模拟游戏商城多活架构

艾瑾行

架构训练营

代码随想录Day44 - 动态规划(六)

jjn0703

将整python项目的代码中的py文件转为so

关耳

Python

Programming abstractions in C阅读笔记: p118-p122

codists

c

2023 ARTS 01

MiracleWong

ARTS 打卡计划

2023 年第 33 周 ARTS 打卡

Bryan

在 Go 中如何编写出可测试的代码

江湖十年

golang 后端 单元测试

Visio Viewer for Mac(Visio文件编辑查看工具) v3.1.0中文激活版

mac

苹果mac Windows软件下载 Visio Viewer 文件编辑查看工具

用Go编写ChatGPT插件

俞凡

golang 人工智能 ChatGPT

5分钟搞懂ECN

俞凡

网络

大规模敏捷的7个容易被误解的真相

俞凡

最佳实践 敏捷开发 组织架构

ARTS打卡第一周

穿过生命散发芬芳

ARTS 打卡计划

隐私计算技术|深度解读可信隐私计算框架 “隐语”

隐语SecretFlow

联邦学习 数据安全 隐私计算

python通过将py文件转为so实现代码加密

关耳

Python

Nautilus Chain 主网上线拉开模块化序幕,一文纵览生态项目

鳄鱼视界

Snagit 中文for mac(强大的屏幕截图工具) 2023.2.2

胖墩儿不胖y

Mac软件 截图工具 屏幕截图

10分钟搞懂LLMOps

俞凡

人工智能 ChatGPT

2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你可以把任意连续的一段子串,变成'W'、'A'、'S'、'D'组成的随意状

福大大架构师每日一题

福大大架构师每日一题

Python爬虫实战:根据关键字爬取某度图片批量下载到本地(附上完整源码)

袁袁袁袁满

Python 爬虫案例

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