写点什么

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

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

关注

评论

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

服务全球用户,EMQ X Cloud 新增欧洲部署支持

EMQ映云科技

服务器 mqtt 部署与维护 Cloud emq

Linux内核内存管理:地址转换和MMU

Linux服务器开发

操作系统 内存管理 Linux内核 内核开发 地址转换

filecoin挖矿教程?filecoin挖矿收益如何?

区块链 分布式存储 IPFS filecoin挖矿 filecoin收益

比特币矿池如何触底反弹?比特币矿企的未来出路在哪里?

CECBC

中国做ipfs公司排名?挖ipfs排名前三的公司是?ipfs矿机哪家最好?

中国做ipfs公司排名 ipfs矿机哪家最好 挖ipfs排名前三的公司是

如何认知新技术?区块链技术和应用

百度开发者中心

区块链 最佳实践 方法论

PyFlink 开发环境利器:Zeppelin Notebook

Apache Flink

Zeppelin notebook pyflink 开发环境利器

网络攻防学习笔记 Day116

穿过生命散发芬芳

网络安全 8月日更

从技术到服务,小鹅通成功的「底层逻辑」是什么?

ToB行业头条

快手基于 Flink 构建实时数仓场景化实践

Apache Flink

flink 解决方案 实时数仓架构 快手

如何短时间突击 Java 通过面试?

Java架构师迁哥

如何利用FL Studio编曲--入门级

懒得勤快

业界首个高性能交互式自动标注工具——EISeg正式开源!

百度大脑

人工智能 开源

PyFlink 开发环境利器:Zeppelin Notebook

阿里云大数据AI技术

安卓工控主板通信接口有哪些呢?

双赞工控

安卓主板 工控主板

你真的了解二叉树吗?(手撕算法篇)

有道技术团队

二叉树 网易有道

阿里大牛肝出的443页TCP/IP协议趣谈笔记,竟然在GitHub标星27k+

Java 编程 架构 面试 架构师

Python代码阅读(第18篇):变形词判断

Felix

Python 编程 Code Programing 阅读代码

Baetyl推动边云融合 点亮智能物联网

百度大脑

人工智能 开源

强化学习中,Q-Learning与Sarsa的差别有多大?

行者AI

强化学习

如何搭建SpringcloudAlibaba基础环境(一)

程序员半支烟

Java 微服务

为什么Kafka的数据不写了?

BUG侦探

DNS gopack Linux操作系统

深入了解现代web浏览器(第一部分)

GKNick

每天学习 10 个实用Javascript代码片段(六)

devpoint

mathjs 加密函数 随机数 8月日更

区块链技术如何在涉诉信访中显身手

CECBC

关于数据库应用的一些思考

石云升

数据库 8月日更

英特尔的碳中和版图

科技新消息

neo4j 安装与基本操控

escray

学习 neo4j 8月日更

久等了!【Innovation 2021】网易应用创新开发者大赛正式开赛!

网易云信

开源 架构 开发者 网易 语言 & 开发

Filecoin价格今日行情:filecoin价格还能怎么走?

区块链 分布式存储 IPFS filecoin价格 filecoin行情

新思科技软件组成分析解决方案获得Forrester Wave认可

InfoQ_434670063458

新斯科技 Forrester 软件组成分析

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