scala - 从Scala解释器打印Unicode

标签 scala utf-8 interpreter

使用Scala解释器时(即在命令行上运行命令“scala”),我无法正确打印unicode字符。当然可以正确打印a-z,A-Z等,但是例如€或ƒ打印为?。

print(8364.toChar)

结果是 ?而不是€。
可能是我做错了。我的终端支持utf-8字符,即使我将输出通过管道传输到单独的文件并在texteditor中打开它,被陈列。

这一切都在Mac OS X(Snow Leopard,10.6.2)和Scala 2.8(每晚构建)和Java 1.6.0_17上发生。

最佳答案

我找到了问题的原因,并找到了使其能够正常工作的解决方案。
正如我在发布问题并阅读Calum的答案以及在Mac上使用另一个项目(使用Java)在Mac上进行编码的问题后已经怀疑的那样,问题的原因是Mac OS X使用的默认编码。当您启动scala时解释程序,它将为指定平台使用默认编码。在Mac OS X上,这是Macroman;在Windows上,可能是CP1252。您可以通过在scala解释器中键入以下命令来检查此问题:

scala> System.getProperty("file.encoding");
res3: java.lang.String = MacRoman

根据scala帮助测试,可以使用-D选项提供Java属性。但是,这对我不起作用。我最终设置了环境变量
JAVA_OPTS="-Dfile.encoding=UTF-8"

运行scala后,上一条命令的结果将给出以下结果:
scala> System.getProperty("file.encoding")
res0: java.lang.String = UTF-8

现在,打印特殊字符可以按预期工作:
print(0x20AC.toChar)               
€

因此,这不是Scala中的错误,而是默认编码的问题。我认为,最好在所有平台上默认使用UTF-8。在寻求答案的过程中,我在此问题的Scala邮件列表中遇到了discussion。在第一条消息中,建议当file.encoding报告Macroman时,默认情况下在Mac OS X上使用UTF-8,因为UTF-8是Mac OS X上的默认字符集(我想知道为什么默认情况下file.encoding设置为Macroman,可能这是Mac OS 10发行之前的继承?)。我不认为此建议将成为Scala 2.8的一部分,因为Martin Odersky wrote可能最好将它们保留在Java中(即尊重file.encoding属性)。

关于scala - 从Scala解释器打印Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948044/

相关文章:

f# - 是否可以使用 F# 模式匹配作为另一种语言或 DSL 的求解器/库?

python - Python中的Url解码UTF-8

c++ - 为什么我尝试输出一个 UTF-8 字符时得到三个不同的数字?

Racket - 制作关闭和应用关闭

compilation - 是否有可用的确定性架构模拟器?

python - python 中的 u' ' 前缀和 unicode() 有什么区别?

scala - Akka流-计时器或计划程序(如CRON)

java - 如何在 Scala 中比较字符串数组与 JUnit

scala - 在 Scala 中的类型

java - 在 maven 中构建 scala-java-antlr 项目会导致运行时出现 ClassDefNotFoundError