【发布时间】:2016-03-30 20:18:41
【问题描述】:
我猜想 Scala 在显示“\303\251” unicode 时出了点问题。理想情况下,它应该显示“é”,但它显示的是“é”。
我尝试了几个 scala 版本,例如 2.10.4、2.10.5 和 2.11.8,但我得到了相同的输出(即 é)。
$ JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 sbt
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
> console
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71).
scala> print ("\303\251")
é
scala> System.getProperty("file.encoding");
res2: String = UTF8
即使我对 \303\251 使用等效的十六进制转义文字,即 \u00c3\u00a9,仍然是相同的输出
scala> print ("\u00c3\u00a9")
é
注意:我只在 Linux 和 Ubuntu 操作系统中遇到这个问题,但在 MAC 中它工作得很好,如下所示:
scala> print ("\303\251")
é
我不明白为什么 scala 在 linux 和 ubuntu 机器上给出错误的输出。有人遇到过这个问题吗?请让我知道如何解决这个问题。感谢您的时间和帮助。
【问题讨论】:
-
这可能是 Linux 字符编码问题。我猜 Linux 机器中的底层字符编码对这些字符的解释与 Mac 不同。
-
从我的 Lubuntu 15.10 (Linux 4.2.0-34-generic) 笔记本电脑上的 REPL (2.11.7) 正确打印。但是,我确实收到“不推荐使用八进制转义文字”的警告。
-
从命令行调用
echo -e "\u00c3\u00a9"会得到什么? -
Scala 2.11.6 可以很好地打印 REPL
code Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_40). Type in expressions to have them evaluated. Type :help for more information. scala> val x = "\303\251" warning: there were two deprecation warnings; re-run with -deprecation for details x: String = é中的字符我认为问题在于您的操作系统中的编码 -
你好@Jwh,我执行了
echo -e "\u00c3\u00a9",输出是一样的\u00c3\u00a9
标签: scala encoding utf-8 character-encoding sbt