【问题标题】:Whats wrong with Scala encoding?Scala 编码有什么问题?
【发布时间】: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


【解决方案1】:

是的,Linux 字符编码是问题所在。更改环境变量LANG(如下图)后,一切正常。

/usr/bin/env LANG=en_US.UTF-8 /usr/bin/xterm

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2012-07-13
    相关资源
    最近更新 更多