JRuby与中文

前两天想为一个Swing的程序嵌入一个动态语言,用来编写自动化测试的脚本。因为觉得现在Ruby挺火的就选了JRuby了。结果发现JRuby好像不支持中文。比如下面这段代码在Eclipse+JDK1.5的环境下运行,控制台输出的结果是一个“灎”

package nc.ui.script;

import org.apache.bsf.BSFException;
import org.apache.bsf.BSFManager;

public class Unicodetest {
public static void main(String[] args) throws BSFException {
BSFManager.registerScriptingEngine("ruby", "org.jruby.javasupport.bsf.JRubyEngine", new String[] {"rb"});
BSFManager manager = new BSFManager();
manager.exec("ruby", "(java)", 1, 1, "puts '增加'");

//what i get in the console is 灎
}
}

不得以,只能找来JRuby的源码调试了一下,最后发现方法
org.jruby.lexer.yacc.StringTerm.parseStringIntoBuffer可能有点问题。这个方法在解析Ruby代码时候好像没有考虑多字节语言,把一个char直接转型成了byte。“增”字的Unicode编码是0x589E,“加”的Unicode编码是0x52A0,转换成byte后,前者成了0x9E,后者成了0xA0,0x9EA0刚好是GBK编码的"灎"字。而我的Eclisp控制台的默认编码方式就是GBK.

后来我把上面提到的方法parseStringIntoBuffer试着稍微改了一下,大概思路就是,如果是一个多字节的char,就转换成一个byte数组,而不是直接转型成byte.

String s = new String(new char[] {c});
byte[] bs = s.getBytes();
for (byte b : bs)
{
buffer.append(b);
}

然后上面例子就通过了。 不过没有在其他的环境(不同的语种)下测试过。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值