2012-12-13 135 views
7

由於某些原因,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_ALLen_US.UTF-8沒有幫助。

這個問題與這個StackOverflow問題有關嗎?Javascript using UCS-2

什麼問題,我該如何在Rhino REPL中使用適當的Unicode?

+0

我看不到相同的問題。我使用的是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,混合模式)。 –

+1

嘗試從環境中消除犀牛。如果在Unix命令行中輸入「echo'тотальнаякиборгизация''命令而不運行Rhino,會發生什麼? –

+1

在計算控制字符後,您得到的輸出實際上是UTF-16,而不是UTF-8。 (鑑於此,簡單的ASCII工作原理是奇特的。)您可以嘗試編譯並運行此Java以查看虛擬機的設置是否應該受到指責: 'class Test {main {String [] args} System.out.println(「тотальнаякиборгизация」); } }' – psmay

回答