写点什么

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

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

关注

评论

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

大教堂终将倒下,但集市永存

TiDB 社区干货传送门

实践案例 数据库架构选型

使用pd-recover 恢复pd 多数节点故障的场景

TiDB 社区干货传送门

管理与运维 故障排查/诊断

如何在 TiDB 上高效运行序列号生成服务

TiDB 社区干货传送门

管理与运维

关于 TiDB 性能优化的一些思考

TiDB 社区干货传送门

性能调优

通过 BR 完成不同 K8s 的 TiDB 集群的数据恢复

TiDB 社区干货传送门

故障排查/诊断

多种方式告诉你如何计算DM同步数据到TiDB的延时时间

TiDB 社区干货传送门

管理与运维

TiDB 优化之消失的统计信息

TiDB 社区干货传送门

实践案例

TiDB升级5.x连接问题

TiDB 社区干货传送门

故障排查/诊断

使用 TiDB 构建实时应用

TiDB 社区干货传送门

实践案例

TUG 技术大咖圆桌讨论:如何评判一个数据架构的好坏

TiDB 社区干货传送门

数据库架构选型

【文章】精选实践汇总2

TiDB 社区干货传送门

实践案例

【TiDB 最佳实践系列】TiDB 高并发写入常见热点问题及规避方法

TiDB 社区干货传送门

实践案例

cdc 同步到 s3 的故障

TiDB 社区干货传送门

迁移 管理与运维 故障排查/诊断 新版本/特性发布

一次热点问题排查经历

TiDB 社区干货传送门

故障排查/诊断

TiDB 热点问题定位

TiDB 社区干货传送门

故障排查/诊断

MySQL 与 TiDB 不同的 DDL 发展历程

TiDB 社区干货传送门

TiDB 底层架构

TiDB实例间数据同步之TiCDC实践

TiDB 社区干货传送门

实践案例

TiDB 多Socket 服务器性能扩展问题分析

TiDB 社区干货传送门

性能调优 性能测评

JQ 入门教程

TiDB 社区干货传送门

TiDB 底层架构

端到端的实时计算:TiDB + Flink 最佳实践

TiDB 社区干货传送门

实践案例

raft:分布式一致性算法笔记

TiDB 社区干货传送门

TiDB 底层架构

Chaos Mesh 助力 Apache APISIX 提升稳定性

TiDB 社区干货传送门

实践案例

数据库选型中的非技术因素

TiDB 社区干货传送门

数据库架构选型

一篇文章带你玩转 TiDB 灾难恢复

TiDB 社区干货传送门

故障排查/诊断

2 年成本节省 73%,京东物流在云数据库上的选择和实战

TiDB 社区干货传送门

实践案例

实时 AP、分库分表、大数据应用,TiDB 在虎牙直播是怎么用的?

TiDB 社区干货传送门

实践案例

TiDB 慢日志在伴鱼的实践

TiDB 社区干货传送门

实践案例

Weir:原生 TiDB 支持的数据库中间件

TiDB 社区干货传送门

实践案例

PD模块梳理

TiDB 社区干货传送门

TiDB 底层架构

5.0 新特性试用体验之 Clustered Index

TiDB 社区干货传送门

实践案例 TiDB 底层架构 版本测评 新版本/特性发布 性能测评

【文章】精选实践汇总1

TiDB 社区干货传送门

实践案例

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