Китайские искаженные в REPL в скале - PullRequest
3 голосов
/ 25 ноября 2011

Когда я набираю китайские иероглифы в REPL, отображаются только вопросительные знаки, как на моем втором снимке экрана.Как я могу это исправить?Моя версия Scala 2.9.0.1 и ОС Windows

before input the Chinese: 中国 using 搜狗输入法

after input

Can't display the Chinese word correctly

Даже если я запускаю REPL ссвойство -Dfile.encoding="UTF-8"

Ответы [ 2 ]

5 голосов
/ 25 ноября 2011

Вы должны сообщить REPL, что хотите использовать Unicode (или любую другую кодировку). Попробуйте

scala -Dfile.encoding="UTF-8"

при открытии REPL.

3 голосов
/ 25 ноября 2011

Ах, вы на Windows.Я не думаю, что это поддерживается в данный момент.У меня есть представление о том, что происходит.См. https://issues.scala -lang.org / browse / SI-4711 для расследования.

Корень проблемы:

  1. jline2 (его янсиЗависимость) загружает DLL, которая использует какой-либо вариант 8 бит getc для чтения символов на консоли и не поддерживает двухбайтовые символы.Вместо этого можно использовать вызов API: ReadConsoleInputW.
  2. В выходной печати REPL используется базовый Java System.out, который не печатает символы Юникода надежно - хотя ваш первый снимок в вашем вопросе, кажется, подразумевает, что онработы *.

Я не являюсь частью команды Scala, но я пытался это исправить, и у меня может что-то работать более или менее.См. https://github.com/fusesource/jansi-native/blame/master/src/main/java/org/fusesource/jansi/internal/WindowsSupport.java (на основе WriteConsoleW и ReadConsoleInputW и других дополнений в источнике REPL ILoop - изменения находятся где-то в моем форке на github - не обновляются в течение некоторого времени.

Если вам интересно, я могу предоставить экспериментальный форк 2.9.0.1 scala-compiler.jar и jline.jar, и вы можете сказать мне, работает ли он.

* Какой код печатает :1: xx 2:xx 3:xx 4:x 5:x, где x - какой-то китайский символ?

...