写点什么

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

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

关注

评论

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

Redis 知识点全面击破,多图警告

小小怪下士

Java redis 程序员

SAP | 功能模块

暮春零贰

SAP 功能块 10月月更

华为开发者大会 2022即将举办 HarmonyOS开发者用“代码”创造无限可能

极客天地

JavaScript模板字符串与es6中let的用法

何极光

ES6 let 模板字符串 10月月更

Java | Map集合两种遍历方式

陌上

Java 编程 10月月更

深入nodejs的event-loop

coder2028

node.js

彻底搞懂nodejs事件循环

coder2028

node.js

文读懂NodeJs知识体系和原理浅析

coder2028

node.js

SAP | 在ABAP中如何使用方法

暮春零贰

SAP 方法调用 10月月更

“程”风破浪的开发者|一起来看看北大才女刘媛媛珍藏已久的学习方法吧!一定要点进来

跟着飞哥学编程

学习方法 “程”风破浪的开发者

JavaScript刷LeetCode拿offer-经典高频40题

Geek_07a724

JavaScript LeetCode

MobLink for Flutter

MobTech袤博科技

flutter ios android

Java | HashMap和哈希表数据结构

陌上

Java 编程 10月月更

Java | Map集合的子类

陌上

Java 编程 10月月更

新闻贴 | KaiwuDB 受邀亮相中国 1024 程序员节

KaiwuDB

JavaScript刷LeetCode拿offer-二叉树层序遍历篇

Geek_07a724

JavaScript LeetCode

前端工程师leetcode算法面试必备-二叉树深度广度遍历

js2030code

JavaScript LeetCode

云安全系列2:访问安全和身份管理

HummerCloud

云计算 云安全 iam 身份和访问管理 10月月更

实用的正则表达式知识【建议收藏】

何极光

正则表达式 10月月更 RegExp

js进阶手写常见函数

hellocoder2029

JavaScript

Apache Linkis 介绍

一道圣光

计算中间件 大数据 开源 数据计算 10月月更

嵌入式 Linux 入门 环境篇(二、安装虚拟机 — 体验 Ubuntu 22.04)

矜辰所致

Ubuntu20.04 嵌入式Linux 10月月更

JavaScript刷LeetCode拿offer-链表篇

Geek_07a724

JavaScript LeetCode

前端工程师leetcode算法面试必备-简单的二叉树

js2030code

JavaScript LeetCode

漏洞评分高达9.8分!Text4Shell 会是下一个 Log4Shell吗?

SEAL安全

安全 log4j 漏洞分析 Log4j2 漏洞 软件供应链安全

从 wepy 到 uniapp 变形记

vivo互联网技术

wepy uni-app 前端 编译器

js对象和原型、原型链的关系

hellocoder2029

JavaScript

前端工程师leetcode算法面试必备-二叉树的构造和遍历

js2030code

JavaScript LeetCode

原生拖拽太拉跨了,纯JS自己手写一个拖拽效果,纵享丝滑

茶无味的一天

CSS html HTML5, CSS3 拖拉拽 原生js

0元上新丨PostgreSQL零基础开发指南+223页学习资料

博文视点Broadview

js异步编程的三种模式

hellocoder2029

JavaScript

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