写点什么

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

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

关注

评论

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

京东商品列表API实战:关键词搜索与数据获取全指南

Datafox(数据狐)

京东API 京东商品列表API 京东数据采集 京东数据分析 关键词搜索京东api

Gartner的AI存储大考,华为如何交出“最高分答卷”?

脑极体

AI

司马阅与佳富恒达成生态战略合作,AI技术与教育场景的深度融合释放教育领域核心价值

司马阅

超越代码生成:AI如何重塑技术团队协作模式

qife122

团队协作 AI编程

智算时代下操作系统的破局之路!龙蜥技术生态分论坛议程上线 | 2025 龙蜥大会

OpenAnolis小助手

AI 操作系统 龙蜥操作系统大会

大模型应用开发技术路线(中):大模型微调与定制从概念到落地

六边形架构

人工智能 大模型 模型微调

出海 AI 公司招 Java 大佬|北京

程序员泥瓦匠

司马阅与道生达成生态战略合作,AI 技术赋能政企服务

司马阅

Bright Data:为 AI 视频与多模态数据采集打造企业级基础设施

知识浅谈

人工智能 爬虫

2025 国内数据资产管理平台 TOP10 解析:从合规到价值的进化之路

科技经济

主流低代码开发平台有哪些:加速数字化转型的核心力量

科技经济

储能如何精准“嵌入”绿电直连?破解容量、策略与经济性三重挑战

西格电力

光伏发电 #高性能存储 新能源产业 风电 绿电直连

AI英语学习APP的核心功能

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语

AI智能体 - 提示链

Hernon AI

方法论 AI 智能体 AIGC解决方案 AI应用开发 AI开发框架

政企联手的SPD模式,撕开了建筑业生产关系变革的第一道口子

AI4ELAB

React 中 useCallback 的基本使用和原理解析

老李说技术

useCallback react fiber

司马阅与三平立维柏达成生态战略合作,共建“AI+建筑”产业新生态

司马阅

AVrecon僵尸网络感染超7万台Linux路由器,潜伏两年终被发现

qife122

网络安全 Linux恶意软件

储能技术怎么选?— 电化学、飞轮、氢能适配绿电直连场景深度对比

西格电力

高性能存储 #高性能存储 智慧储能电站 储能 绿电直连

基于业务知识和代码库增强的大模型生成代码实践

京东科技开发者

司马阅与数之境科技达成生态战略合作,释放1+1>2的产业赋能价值

司马阅

司马阅与赢思强达成生态战略合作,共同推动企业培训业实现从“经验驱动”到 “数据智能驱动”的升级

司马阅

HIPAA新规升级:小型诊所的数据安全指南

qife122

HIPAA 医疗合规

中昊芯英入选省发改委“2025年浙江省服务业领军企业名单”

科技经济

2025支持AI 驱动数字化转型的低代码开发平台有哪些

科技经济

告别 “盲买”!京东 AI 试穿 Oxygen Tryon:让服饰购物从“想象”到“所见即所得”

京东科技开发者

司马阅与英博瑞达成生态战略合作,合力驱动人力资源服务智能化升级

司马阅

过程控制 软件维护经验总结(6)

万里无云万里天

工业 工厂运维 过程控制

【仓颉开发HarmonyOS系列】仓颉关系型数据库基础操作实战

轻口味

鸿蒙 HarmonyOS 仓颉 仓颉开发教程 鸿蒙仓颉

过程控制 通讯维护经验总结(4)

万里无云万里天

工业 工厂运维 过程控制

司马阅与中网管家达成生态战略合作,共同探索“AI+职业教育”的深度融合路径

司马阅

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