Rhino中的Unicode

Mir*_*lov 7 javascript unicode rhino character-encoding

出于某种原因,在Rhino(Mozilla的JavaScript引擎)中, Unicode字符串的行为不正常.如果我在REPL中输入Unicode文本,或者操纵它,它会返回乱码.

js> '????????? ????????????'
B>B0;L=0O :81>@3870F8O
Run Code Online (Sandbox Code Playgroud)

ASCII字符工作得很好.

js> 'reprap for everyone'
reprap for everyone
Run Code Online (Sandbox Code Playgroud)

Unix命令也可以正常工作:

$ echo '????????? ????????????'
????????? ????????????
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

区域设置:

$ echo $LC_TYPE

$ echo $LANG
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

更改LC_ALLen_US.UTF-8于事无补.

这个问题与这个StackOverflow问题,Javascript使用UCS-2有什么关系吗?

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

Jer*_*her 1

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

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