写点什么

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

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

关注

评论

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

Google大佬自述:天才程序员竟也有不为人知的秘密,看完真的学到了

android 程序员 移动开发

Flutter开发中的一些Tips(二),2021年网易Android岗面试必问

android 程序员 移动开发

Glide加载Gif的卡顿优化思路分析,android开发项目实例记事本

android 程序员 移动开发

pygame 读取一大堆图片进来,再获取一张图片上的那么一小块区域

梦想橡皮擦

11月日更

Flutter提升开发效率的一些方法和工具,零基础入门学习android

android 程序员 移动开发

Gradle指南之从Groovy迁移到Kotlin,2021国内知名大厂Android岗面经

android 程序员 移动开发

HashMap 源码解析一、构造函数,kotlin插件

android 程序员 移动开发

Flutter混合开发(三):Android与Flutter之间通信详细指南

android 程序员 移动开发

Fragment的使用,为什么有人说Android开发不再吃香

android 程序员 移动开发

Fragment的通信,flutter通知推送

android 程序员 移动开发

Flutter的原理及美团的实践(中),直击优秀开源框架灵魂

android 程序员 移动开发

GitHub标星5-3K【字节跳动大牛】手把手讲解-Android-Hook入门Demo

android 程序员 移动开发

GitHub标星8-3k的学习习惯,未来的Android高级架构师:别让这几个点毁了你

android 程序员 移动开发

GitHub标星9,handler机制

android 程序员 移动开发

Handler-post和View-post的区别,android的开发语言

android 程序员 移动开发

Flutter开发之Dart的数据类型01,安卓开发面试自我介绍

android 程序员 移动开发

Flutter开发桌面应用-第一个windwos桌面应用,androidframework视频

android 程序员 移动开发

Flutter这么火为什么不了解一下呢?(下,2020-2021京东Android面试真题解析

android 程序员 移动开发

Gradle 提速:每天为你省下一杯喝咖啡的时间,移动app开发公司

android 程序员 移动开发

HarmonyOS-Service&Android-Service(1),程序员中年危机

android 程序员 移动开发

HarmonyOS-Service&Android-Service,android开发零基础教学

android 程序员 移动开发

Flutter自适应瀑布流,深入浅出安卓开发

android 程序员 移动开发

Glide源码难看懂?用这个角度让你事半功倍!,移动端h5页面加载慢

android 程序员 移动开发

GooglePlay强推的Appbundle究竟是什么?aab?不优化代码直接减少安装包大小(1)

android 程序员 移动开发

Gradle 庖丁解牛(构建生命周期核心委托对象创建源码浅析)

android 程序员 移动开发

Framework掌握不熟?字节跳动大牛带你系统化学习,成功定级腾讯T3-2

android 程序员 移动开发

用技术变革传统康养行业,智慧养老的正确打开方式

华为云开发者联盟

IoT 华为云 康养 智慧养老 智慧康养物联网加速器

Google又更新了:实战-MergeAdapter,hashmap底层原理

android 程序员 移动开发

Fragment新功能,setMaxLifecycle了解一下,一文详解

android 程序员 移动开发

Google 为什么以 Flutter 作为原生突破口,正式加入阿里巴巴

android 程序员 移动开发

模块二作业

@

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