AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

嫌 OSS 查询太慢?看我们如何将速度提升 10 倍!

苏锐

大数据 性能优化 数据湖 OSS 对象存储

为什么我们要工作

黄大路

思考 工作

Kylin 在互联网公司的实践合集

程序员小陶

大数据 kylin

一个关于成长的经验公式

oldj

成长

阅读有术:怎么记住书中的内容

子不语

学习 方法论 读书方式

什么是实时数仓,与离线数仓的区别是什么?

程序员小陶

大数据 数据仓库 实时数仓

实时数仓 | 你需要的是一款强大的 OLAP 引擎

程序员小陶

大数据 OLAP

CentOS 6 升级 OpenSSH 8.1p1

wong

centos openssh

真特么是个好东西

非著名程序员

程序员 效率工具 写作

必要的革命:深层学习与可持续创新

山楂大卷

学习 好书推荐 创新 系统性思考 价值观

死磕Java并发编程(9):无界线程安全队列ConcurrentLinkedQueue源码解析

Seven七哥

Java并发 jdk源码 队列

笔记:《如何系统思考》之系统基模

wiflish

思维方式

自助设备系列——菜品的自助识别结算

孙苏勇

人工智能 产品 行业资讯 智能设备

概念有时候很坑

伯薇

抽象 思考力 沟通 概念

深入解读 IaaS、PaaS、SaaS

燕陈华

IaaS PaaS SaaS

引入了绩效管理,团队反而一天不如一天了?(二)

Geek_6rptuk

团队管理 企业文化 绩效

01-Taro打造hello-world应用

页面仔小杨

小程序 微信小程序 taro

SpringBoot前后端分离项目,集成Spring Security(完整版)

读钓

Java spring Spring Boot spring security

(乱记)“怎样培养优秀孩子”

启润

回“疫”录(14):跨越时空的相同选择

小天同学

疫情 回忆录 现实纪录 感恩

Rust安装注意事项

邱张华

rust 镜像源 diesel

说说数据库主从同步延迟的一个解决方案

M1racle

数据库 主从同步

TensorFlow On Flink 原理解析

Apache Flink

大数据 flink 流计算 实时计算

MySQL 实现排名

黄大路

数据挖掘 MySQL 数据库 sql 数据分析

谈谈控制感(1):控制感与职业方向选择

史方远

ONTAP 9 巡检模板

HU

在线修改主从复制选项

Simon

MySQL

0风险高收益的投资

Neco.W

学习 投资 自我提升

上下文切换的资源消耗

麻瓜镇

多线程 操作系统

打造高颜值 iTerm2

辛晓亮

macos Mac 终端 terminal

高仿瑞幸小程序 07 为你推荐模块

曾伟@喵先森

小程序 微信小程序 大前端

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