2012-12-13 14 views
7

Z jakiegoś powodu ciągi Unicode nie zachowują się poprawnie w Rhino, Mozilla's JavaScript engine. Jeśli wprowadzę tekst Unicode do REPL lub nim manipuluję, to powróci bełkot.Unicode w Rhino

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

znaków ASCII działać dobrze.

js> 'reprap for everyone' 
reprap for everyone 

Unix polecenia działają zbyt dobrze:

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

wyjście JVM też jest w porządku, działa class Test { public static void main(String[] args) { System.out.println("тотальная киборгизация"); } } wyprowadza cyrylicy poprawnie.

wersje Java i Rhino to:

$ 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 

językowe:

$ echo $LC_TYPE 

$ echo $LANG 
en_US.UTF-8 

Zmiana LC_ALL do en_US.UTF-8 nie pomaga.

Czy ten problem ma związek z tym pytaniem StackOverflow, Javascript using UCS-2?

Na czym polega problem i jak mogę użyć właściwego Unicode w REPL?

+0

Nie widzę tego samego problemu. Używam 'Rhino 1.7 release 2 2009 03 22' oraz' java version "1.6.0_26" '' Java TM TM SE Runtime Environment (kompilacja 1.6.0_26-b03-384-9M3425) '' Java HotSpot (TM) 64-bitowa maszyna wirtualna serwera (kompilacja 20.1-b02-384, tryb mieszany) 'w systemie Mac OS X 10.5.8. –

+1

Spróbuj wyeliminować Rhino ze środowiska. Co się stanie, gdy podasz linii poleceń Unix polecenie "echo" тотальная киборгизация'', bez uruchamiania Rhino? –

+1

Dane wyjściowe, które uzyskujesz, po uwzględnieniu znaków kontrolnych, są w rzeczywistości UTF-16, a nie UTF-8. (Biorąc to pod uwagę, fakt, że zwykły ASCII działa, jest osobliwy.) Możesz spróbować skompilować i uruchomić tę Javę, aby sprawdzić, czy ustawienia maszyny wirtualnej są obwiniane: 'test klasy { public static void main (String [] args) { System.out.println ("тотальная киборгизация"); } } ' – psmay

Odpowiedz