由於某些原因,Unicode字符串在Rhino, Mozilla's JavaScript engine中的行爲不正確。如果我在REPL中輸入Unicode文本,或者操作它,它會返回亂碼。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("тотальная киборгизация"); } }
正確輸出西里爾。
Java和犀牛版本:
$ 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_ALL
到en_US.UTF-8
沒有幫助。
這個問題與這個StackOverflow問題有關嗎?Javascript using UCS-2?
什麼問題,我該如何在Rhino REPL中使用適當的Unicode?
我看不到相同的問題。我使用的是Java Rhino 1.7版本2 2009 03 22和Java版本1.6.0_26「Java™SE運行時環境(build 1.6.0_26-b03-384-9M3425)」Java HotSpot™「 Mac OS X 10.5.8上的64位服務器VM(內部版本20.1-b02-384,混合模式)。 –
嘗試從環境中消除犀牛。如果在Unix命令行中輸入「echo'тотальнаякиборгизация''命令而不運行Rhino,會發生什麼? –
在計算控制字符後,您得到的輸出實際上是UTF-16,而不是UTF-8。 (鑑於此,簡單的ASCII工作原理是奇特的。)您可以嘗試編譯並運行此Java以查看虛擬機的設置是否應該受到指責: 'class Test {main {String [] args} System.out.println(「тотальнаякиборгизация」); } }' – psmay