`
alhawk
  • 浏览: 4254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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);
            }

然后上面例子就通过了。 不过没有在其他的环境(不同的语种)下测试过。
          
分享到:
评论

相关推荐

    如何安装与配置JRuby

    **JRuby 安装与配置指南** JRuby 是一个基于 Java 平台的 Ruby 实现,它允许开发者利用 Ruby 语言的优势同时享受 Java 生态系统的强大功能。在本文中,我们将详细探讨如何安装和配置 JRuby,特别是针对 JRuby 1.1.2...

    Jruby+cucumber+celerity配置

    #### 一、JRuby的配置与安装 JRuby 是一种能够在 Java 平台上运行的 Ruby 解释器,它提供了在 Java 虚拟机(JVM)上运行 Ruby 应用程序的能力。下面详细介绍如何配置JRuby。 1. **下载JRuby**: - 访问官方网址:...

    joni-2.1.2-API文档-中文版.zip

    标签:joni、jruby、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    Ruby中文文档.zip

    它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,...

    java api 1.7 中文文档

    1. **动态类型语言支持**:通过引入`invokedynamic`字节码指令,JDK 1.7增强了对动态类型语言如Groovy和JRuby的支持。这使得Java平台能够更高效地运行这些语言,并且允许在运行时动态改变方法调用的行为。 2. **...

    Java虚拟机规范(中文 翻译版 Java_SE_7).rar

    6. **动态类型与invokedynamic指令**:Java SE 7引入了新的invokedynamic指令,支持更高效的动态语言实现,如Groovy、JRuby等。 7. **并发与多线程**:JVM提供线程创建、同步和通信的API,Java SE 7中的Fork/Join...

    jdk1.7中文开发文档

    2. **动态语言支持(InvokeDynamic)**: Java 7引入了`invokedynamic`指令,为动态语言提供更好的支持,如Groovy和JRuby。 3. **并发原子类增强**: 增加了更多的原子类,如`AtomicMarkableReference`和`...

    JAVA_API_1.7中文版

    《JAVA_API_1.7中文版》文档是针对Java开发人员的重要参考资料,它详细阐述了Java Development Kit (JDK) 1.7版本中的API接口和类库。这个文档采用.docset格式,这是一种专为技术文档设计的结构化格式,常见于专业...

    JavaSE7中文文档for Dash (Mac)

    9. **动态语言支持**:JDK 7引入了JSR 292(invokedynamic指令),为Java提供了更好的支持动态语言的能力,如Groovy和JRuby。 10. **并发更新集合**:对`java.util.concurrent`包中的`ConcurrentHashMap`进行了优化...

    java api文档 1.6中文版 1.7 1.8中文版 javaee1.5

    本压缩包提供了Java API的1.6、1.7、1.8中文版以及Java EE 1.5的API文档,对于中国开发者来说,中文版的文档更便于理解和学习。 首先,让我们来看看Java SE 1.6、1.7和1.8的主要变化和新增特性: 1. **Java SE 1.6...

    jdk api1.7 中文版

    7. **动态语言支持**:Java 7引入了 invokedynamic 指令,这是为了支持脚本语言和动态类型语言在Java平台上的运行,如Groovy和JRuby。 8. **Fork/Join框架**:这是一个并行计算框架,通过将大任务分解为小任务来...

    ruby语言帮助文档(简体中文)

    块可以与方法一起使用,形成闭包,这样就可以在方法中捕获并操作外部作用域的变量。 6. **元编程**:Ruby的元编程能力非常强大,允许在运行时修改和创建类和对象。这得益于Ruby的反射API和`send`方法,可以动态地...

    java_API中文1.6,1.5

    本资源包含Java API的1.5和1.6两个版本的中文文档,有助于深入理解和对比这两个版本之间的差异。 在Java 1.5(也称为Java SE 5.0)中,引入了许多重要的新特性,旨在提升开发效率和代码质量: 1. **泛型(Generics...

    Inside the Java Virtual Machine(中文第2版)_带标签

    13. **JVM与动态语言支持**:了解JVM对动态语言如JRuby、Groovy的支持,以及JIT编译器如何提高动态语言的性能。 《Inside the Java Virtual Machine(中文第2版).pdf》这本书提供了详细的技术细节,对于想要深入理解...

    JAVA 1.7 API官方文档中文版

    7. **动态语言支持( invokedynamic)**: 这是Java字节码指令集的一个新指令,为动态类型语言提供更好的支持,例如Groovy和JRuby。 8. **异常链(Exception Chaining)**: 允许一个异常实例包含另一个异常作为其...

    java7和java8 api中文文档

    7. **动态语言支持**:JRuby、Groovy等动态语言在Java 7中得到了更好的支持,通过JSR 223和JSR 199实现了脚本引擎。 Java 8(也称为Java SE 8或Java Platform, Standard Edition 8)在2014年发布,它引入了更多创新...

    jdk api 1.8中文.rar

    - **日期与时间API的改进**:用`java.time`包取代了`java.util.Date`和`java.util.Calendar`,提供更直观、线程安全的日期时间处理。 2. **基础类库增强** - **Optional类**:为解决null安全问题,引入了Optional...

    Java API帮助文档中文版1.8版和官方中文1.6版

    在本文中,我们将深入探讨Java API 1.8中文版和1.6版的主要特点、重要更新以及如何有效地利用这些文档进行开发。 首先,让我们关注Java API 1.8版本。这个版本引入了大量的新特性和改进,以增强Java语言的生产力和...

    java 1.7 官方中文

    6. **动态语言支持**:引入了JSR 292,增强了Java虚拟机对动态语言的支持,如Groovy和JRuby。 7. **改进的并发工具**:`java.util.concurrent`包中添加了新的并发工具类,如`ForkJoinPool`和`CountDownLatch`,提升...

Global site tag (gtag.js) - Google Analytics