写点什么

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

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

关注

评论

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

百度AI继续霸榜!百度搜索蝉联国内AI产品第一

Geek_2d6073

(cdr平面设计) CorelDRAW Graphics Suite 2023 for mac 序列号分享

理理

数据驱动决策:低代码平台如何助力智能化业务分析

天津汇柏科技有限公司

数据驱动 低代码平台

Kubernetes的Pod调度:让你的应用像乘坐头等舱!

不在线第一只蜗牛

Kubernetes 容器 云原生

C++20中对于并发方面的进步

快乐非自愿限量之名

c++ 并发

音乐创作编辑软件Studio One 7 Pro for mac

Mac相关知识分享

软件

万界星空科技MES系统与各大系统的集成

万界星空科技

系统集成 mes 万界星空科技mes 生产管理MES系统

FinClip助推鸿蒙系统全面商用,纯鸿蒙系统化加速冲刺!

Geek_2305a8

全景图拼接制作工具PTGui Pro for Mac

Mac相关知识分享

探讨微服务治理场景中,Sermant Backend如何管理插件动态配置

华为云开发者联盟

Backend Developer javaagent 微服务、 sermant

哪家前端跨平台开发工具最出色?

Geek_2305a8

打通前后端流程,案例解读华为云开源低代码引擎解决方案

华为云开发者联盟

软件开发 低代码, TinyEngine

功能强大的 VNC 远程控制软件VNC Server for Mac

Mac相关知识分享

软件

“元脑企智”EPAI:企业AI应用从“手工作坊”到“工厂高精产线”

脑极体

AI

总奖金高达10万元!华为算法精英实战营“亲和任务调度系统”来啦!

华为云开发者联盟

cpu 芯片设计 任务调度

2024年区块链钱包现状与未来趋势分析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

10款好用的开源 HarmonyOS 工具库

威哥爱编程

鸿蒙 HarmonyOS HarmonyOS NEXT

Illustrator 2024(AI2024)的核心优势和特点

理理

DoYourClone for Mac(磁盘克隆工具)

Mac相关知识分享

HPE Aruba Networking Central扩展AI自动化能力 推出第三方设备及终端用户体验监控功能

科技热闻

阿里巴巴商品详情API返回值:电商行业发展的新动力

技术冰糖葫芦

API 接口 API 文档 API 测试 API 性能测试

域名的命名规则有哪些?注册域名需要注意哪些?

国科云

30个sql调优及高级sql技巧

威哥爱编程

MySQL oracle #SQL

Vue状态管理库Pinia详解

威哥爱编程

JavaScript Vue Pinia

Autodesk Flame v2025.1.2最新激活版 支持Intel/M1/M2/M3

理理

万界星空科技MES数据的集成方式

万界星空科技

制造业 mes 万界星空科技 万界星空科技mes

用JS实现简单的屏幕录像机

京东科技开发者

如何用AI快速开发一个小程序?

FinFish

小程序开发 AI技术开发 AI生成小程序

A股牛市来袭,资本涌动:加密市场的出路与机遇

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 代币开发

RPA在物流企微私域场景的应用

京东科技开发者

「算力包」璀璨亮相2024中国算力大会!

九章云极DataCanvas

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