7

由于某种原因,Unicode 字符串在Mozilla 的 JavaScript 引擎Rhino中无法正常运行。如果我在 REPL 中输入 Unicode 文本,或者对其进行操作,它会返回乱码。

js> 'тотальная киборгизация'
B>B0;L=0O :81>@3870F8O

ASCII 字符工作得很好。

js> 'reprap for everyone'
reprap for everyone

Unix 命令也可以正常工作:

$ echo 'тотальная киборгизация'
тотальная киборгизация

JVM 输出也很好,class Test { public static void main(String[] args) { System.out.println("тотальная киборгизация"); } }正确运行输出 Cyrillic。

Java 和 Rhino 版本是:

$ java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.3) (7u9-2.3.3-0ubuntu1~12.10.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
$ rhino
Rhino 1.7 release 3 2012 05 18

语言环境:

$ echo $LC_TYPE

$ echo $LANG
en_US.UTF-8

更改LC_ALLen_US.UTF-8没有帮助。

这个问题是否与这个 StackOverflow 问题有关,Javascript using UCS-2

有什么问题,如何在 Rhino REPL 中使用正确的 Unicode?

4

1 回答 1

1

确实应该注意,JavaScript 并不能真正正确地处理 Unicode,因为它早于 UTF16。(它确实使用了另一个类似的 16 位编码系统,但肯定不一样。)

这篇 文章很好地解释了这个问题,并提供了库和解决方法

于 2013-11-07T14:36:30.530 回答