Scala中REPL显示中文乱码问题

3
当我在REPL中输入中文字符时,只会显示问号,就像我第二张截图所示。我该如何解决这个问题?我的scala版本是2.9.0.1,操作系统是Windows。
即使我使用属性-Dfile.encoding="UTF-8"启动REPL,也无法正确显示中文字符。

我想通过REPL输入中文,但是我得到了无法阅读的东西。 - 爱国者
如果你的问题是:“当我在REPL中输入中文字符时,只显示问号,就像我的第二个截图一样。我该怎么解决?”,那么请说明。 - Philippe
2个回答

5

您必须告诉REPL您想使用Unicode(或任何其他编码方式)。尝试使用:

scala -Dfile.encoding="UTF-8"

打开 REPL 时。


谢谢你的帮助。但不幸的是,它没有产生任何效果。 - 爱国者
嗯,这通常在Unix系统上有用。不幸的是,我不知道它是否也适用于Windows。 - Debilski

3
啊,你在使用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源中的其他添加 - 更改在我的GitHub存储库 my fork 中,但已有一段时间没有更新)。
如果您感兴趣,我可以提供一个实验性的2.9.0.1 scala-compiler.jar和jline.jar分支,您可以告诉我是否有效。 *什么代码可以打印出:1:xx 2:xx 3:xx 4:x 5:x,其中x是一些汉字?

1
在第一张截图的底部,有一些来自输入法编辑器(IME)的中文单词。如果您想输入中文单词,例如中国、亚洲,您必须使用输入法编辑器。 - 爱国者

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接