AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

Scrum框架下玩转敏捷实践

RingCentral铃盛

拆分电商系统为微服务

奔奔

电商系统微服务拆分

张靖

#架构实战营

Rust 元宇宙 17 —— 聊天和表情

Miracle

rust 元宇宙

架构实战毕业总结

人工智能~~~

三步搞定现场意外

将军-技术演讲力教练

11. 《重学JAVA》--字符串

杨鹏Geek

Java 25 周年 28天写作 12月日更

42 K8S之调度器

穿过生命散发芬芳

k8s 28天写作 12月日更

【Three.js】WEB3D项目开发中实用工具推荐

devpoint

WebGL three.js 元宇宙 12月日更

数据大体系(三)——指标

圣迪

大数据 数据 指标体系 指标 数据分层

数字人民币跨境支付测试不断推进,内地居民未来在港购物也可用

CECBC

CSS之选择器(四)

Augus

CSS 12月日更

模块六

侠客行

「架构实战营」

商场里的4S店

张老蔫

28天写作

架构实战营模块六拆分电商平台为微服务

Geek_99eefd

架构实战营 「架构实战营」

【Promise 源码学习】第十八篇 - EventLoop 简介

Brave

源码 Promise 12月日更

OKR的一种实践

wood

OKR 28天写作 组织建设

与2宝的“有效”沟通经验 1

搬砖的周狮傅

沟通

最可怕的黑客攻击:APT攻击

喀拉峻

网络安全 安全

MySQL外键约束

JavaEdge

12月日更

Eureka分区集群部署

李子捌

微服务 28天写作 12月日更

敏捷概念123之----敏捷洋葱圈

Ian哥

敏捷软件开发 敏捷宣言

Redis分布式锁的最佳实践 - Redisson

xcbeyond

redis 分布式锁 28天写作 12月日更

秒杀系统架构

人工智能~~~

LeSS- 大规模敏捷开发框架实践心路

RingCentral铃盛

架构实战营-模块六

随风King

「架构实战营」

架构实战营毕业总结

Rabbit

第六模块总结

张靖

「架构实战营」

尝鲜Go 1.18中范型版本的map和slice

Robert Lu

Go 语言 范型

Musical.ly 创始人:打造用户社区的三板斧

石云升

28天写作 12月日更 社区打造

知犀思维导图

IT蜗壳-Tango

28天写作 12月日更

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