NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

业务-研发一体化管理平台,存在吗?

FinFish

小程序 小程序管理平台 小程序技术

推荐一款较好的小程序管理平台

FinFish

小程序 小程序管理平台 小程序管理

ZBC即将登录Coinbase Institutional,生态开年迎新利好

股市老人

【新春特惠周末班】2月4-5日在线CSPO“价值交付课程” | 全国招生

ShineScrum捷行

产品负责人 CSPO认证 CSPO

华为云服务治理 — 隔离仓的作用

秃头也爱科技

2022 年行摄回忆录

穿过生命散发芬芳

盘点2022 行摄回忆录

TiCDC 源码阅读(三)TiCDC 集群工作过程解析

PingCAP

TiDB 源码解读

2022年度回顾|龙蜥这一年:协同开放 众行致远

OpenAnolis小助手

开源社区 龙蜥 贡献 协同开放

ZBC即将登录Coinbase Institutional,2023年以全新姿态出发

BlockChain先知

“零”代码改动,静态编译让太乙Stable Diffusion推理速度翻倍

OneFlow

人工智能 深度学习

从做技术到做技术管理

石云升

极客时间 技术管理 1月月更 技术领导力实战笔记

大型软件通过“云应用”即点即用,能解决元宇宙的开发之难吗?

B Impact

ZBC即将登录Coinbase Institutional,生态开年迎新利好

鳄鱼视界

代码影响范围工具探索

京东科技开发者

测试 源代码 企业号 1 月 PK 榜 代码影响范围

2022年度 FinClip 扩展SDK推荐!

FinClip

一份价格,双份收货,彻底搞定 PPT,兔年解放你自己

博文视点Broadview

软件测试/测试开发 | 接口自动化测试之JSON Schema模式该如何使用?

测试人

软件测试 接口测试 测试开发 JSON Schema 测试开发自动化测试

DCS分布式缓存服务实例类型介绍

秃头也爱科技

简述JavaScript键盘事件

devpoint

JavaScript 事件监听 事件冒泡 键盘事件

「Go框架」剖析iris中错误码路由的运行机制

Go学堂

golang 开源 个人成长 签约计划第三季

一种面向业务配置基于JSF广播定时生效的工具

京东科技开发者

jdk 后段技术 企业号 1 月 PK 榜 ducc jsf

也谈证券行业数字化转型中的业务与IT融合(上)

三少爷的见

敏捷 需求管理 需求 数字化转型 需求分析

ZBC即将登录Coinbase Institutional,生态开年迎新利好

西柚子

揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!

科技怪授

华为云

Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】task1 赛题理解

一颗小树

机器学习 机器学习笔记

Linux Radix Tree详解

Linux内核拾遗

数据结构 Linux内核 Radix Tree

华为云发布CodeArts Req需求管理工具,让需求管理化繁为简

科技怪授

华为云

ZBC即将登录Coinbase Institutional,生态开年迎新利好

EOSdreamer111

“会说话”的产品包装?“码”上查看!

旺链科技

区块链 区块链技术 区块链溯源

标准发布 |《企业数字化成熟度模型IOMM》(中小企业)发布

信通院IOMM数字化转型团队

数字化转型 IOMM ICT深度观察

采购LED显示屏要注意的五大技术参数

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

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