繁体   English   中英

中文在scala中用REPL乱码

[英]Chinese Garbled in REPL in scala

当我在REPL中输入中文字符时,只显示问号,如我的第二个屏幕截图所示。 我怎样才能解决这个问题? 我的scala版本是2.9.0.1和操作系统窗口

在输入中文之前:中国使用搜狗输入法

输入后

无法正确显示中文单词

即使我用属性-Dfile.encoding="UTF-8"启动REPL

您必须告诉REPL您要使用unicode(或任何编码)。 尝试

scala -Dfile.encoding="UTF-8"

打开REPL时。

啊,你在Windows上。 我认为目前不支持这种做法。 我知道发生了什么。 有关调查,请参阅https://issues.scala-lang.org/browse/SI-4711

问题的根源是:

  1. jline2(它的jansi依赖项)加载一个DLL,该DLL使用8位getc一些变量来读取控制台上的字符,并且不支持双字节字符。 可以使用的API调用是ReadConsoleInputW
  2. REPL输出打印使用底层的Java System.out ,它不能可靠地打印unicode字符 - 尽管你问题中的第一个快照似乎暗示它有效*

我不是Scala团队的成员,但我试图修复它,我可能会有更多或更少的工作。 请参阅https://github.com/fusesource/jansi-native/blame/master/src/main/java/org/fusesource/jansi/internal/WindowsSupport.java (基于WriteConsoleWReadConsoleInputW以及REPL ILoop源中的其他添加ILoop - 更改是在github上的fork中的某个地方 - 暂时没有更新。

如果您有兴趣,我可以提供2.9.0.1 scala-compiler.jar和jline.jar的实验分支,您可以告诉我它是否有效。

* 打印的代码是什么:1: xx 2:xx 3:xx 4:x 5:x其中x是一些中文字符?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM