写点什么

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

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

关注

评论

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

小程序生态对于超级App的构建更灵活

Geek_2305a8

【论文速读】| LLM4FUZZ:利用大语言模型指导智能合约的模糊测试

云起无垠

.NET有哪些好用的定时任务调度框架

不在线第一只蜗牛

.net 任务调度

GaussDB细粒度资源管控技术透视

华为云开发者联盟

数据库 华为云 华为云GaussDB 华为云开发者联盟 企业号2024年5月PK榜

“三个办法”新规将于7月1日起施行

芯盾时代

金融 风控 信贷

Middle for Mac:优雅的文本编辑器,创意的源泉

iMac小白

Middle下载 Middle破解版 Middle激活版 Middle mac

Downie 4 for Mac:一键下载,畅享视频

iMac小白

Downie 4 下载 Downie 4 Mac版 Downie 4中文版

JetBrains Rider 2024 for Mac(跨平台.NET IDE集成开发)v2024.1.2激活版

iMac小白

Rider 2024下载 Rider 2024中文版 Rider 2024破解版

SkyEye:助力飞行器状态控制系统仿真

DevOps和数字孪生

SkyEye 飞行器

一种极简单的SpringBoot单元测试方法| 京东零售技术团队

京东科技开发者

掌握代码协作:GitHub、GitLab 和 Gitee 的远程存储库比较

测吧(北京)科技有限公司

测试

Translatium for Mac(强大的mac翻译软件)v43.0.1中文版

iMac小白

Translatium中文版 Translatium下载 Translatium Mac

释放效率:IDE Git集成与代码管理技艺

测吧(北京)科技有限公司

测试

如何建设企业的生态合作体系

Geek_2305a8

TinyEngine 低代码引擎区块局域网部署方案全新上线!

OpenTiny社区

开源 前端 Web 低代码

MarkMyWords for Mac:高效笔记工具

iMac小白

MarkMyWords 下载 MarkMyWords 激活版 MarkMyWords 破解版

欧洲足球五大联赛直播/转播数据获取及在线观看平台开发方法

软件开发-梦幻运营部

深入理解java反射机制及应用 | 京东物流技术团队

京东科技开发者

小程序实现前端热更新有哪些原理

Geek_2305a8

什么? 20分钟,构建你自己的LLaMA3应用程序| 京东云技术团队

京东科技开发者

深入理解分布式锁:原理、应用与挑战| 京东物流技术团队

京东科技开发者

DiskCatalogMaker for mac(mac磁盘管理工具)v9.0.7中文激活版

iMac小白

DiskCatalogMaker下载 DiskCatalogMaker中文 DiskCatalogMaker破解 DiskCatalogMaker激活

《Git之力:从远程存储库到IDE集成》

测吧(北京)科技有限公司

测试

缺乏数据源?超算安腾助力开启AI药物研发新范式

Geek_2d6073

sublime text for Mac(代码编辑器)v4.0(4175)中文注册版

iMac小白

sublime text下载 sublime text中文版 sublime text破解版 Sublime Text注册版

Tower for Mac(强大的Git客户端)v11.0 注册激活版

iMac小白

Tower下载 Tower mac版 Tower激活版

Downie 4 for Mac(视频下载工具)兼容14系统v4.7.13中文版

iMac小白

Downie 4 Mac版 Downie 4中文版 Downie 4下载

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