Mar*_*urm 20 interpreter scala utf-8
当使用scala解释器(即在命令行上运行命令'scala')时,我无法正确打印unicode字符.当然,正确打印az,AZ等,但例如€或ƒ打印为?.
print(8364.toChar)
Run Code Online (Sandbox Code Playgroud)
结果是 ?而不是€.可能我做错了什么.我的终端支持utf-8字符,甚至当我将输出管道传输到一个单独的文件并在texteditor中打开时,?被展示.
这一切都发生在使用Scala 2.8(每晚构建)和Java 1.6.0_17的Mac OS X(Snow Leopard,10.6.2)上
Mar*_*urm 17
我找到了问题的原因,并找到了使其按预期工作的解决方案.正如我在发布问题和阅读Calum的答案以及使用其他项目(使用Java)在Mac上编码问题后我已经怀疑的那样,问题的原因是Mac OS X使用的默认编码.当你启动scala解释器时,它将使用指定平台的默认编码.在Mac OS X上,这是Macroman,在Windows上它可能是CP1252.您可以通过在scala解释器中键入以下命令来检查:
scala> System.getProperty("file.encoding");
res3: java.lang.String = MacRoman
Run Code Online (Sandbox Code Playgroud)
根据scala帮助测试,可以使用-D选项提供Java属性.但是,这对我不起作用.我最终设置了环境变量
JAVA_OPTS="-Dfile.encoding=UTF-8"
Run Code Online (Sandbox Code Playgroud)
运行后scala,上一个命令的结果将给出以下结果:
scala> System.getProperty("file.encoding")
res0: java.lang.String = UTF-8
Run Code Online (Sandbox Code Playgroud)
现在,打印特殊字符按预期工作:
print(0x20AC.toChar)
€
Run Code Online (Sandbox Code Playgroud)
因此,它不是Scala中的错误,而是默认编码的问题.在我看来,如果在所有平台上默认使用UTF-8会更好.在我考虑答案时,我在这个问题上遇到了关于Scala邮件列表的讨论.在第一条消息中,建议在file.encoding报告Macroman 时默认在Mac OS X上使用UTF-8 ,因为UTF-8是Mac OS X上的默认字符集(让我想知道为什么file.encoding默认设置为Macroman,可能这是10之前发布的Mac OS继承?).我不认为这个提议将成为Scala 2.8的一部分,因为Martin Odersky 写道,最好保留Java中的东西(即尊重file.encoding财产).
| 归档时间: |
|
| 查看次数: |
11208 次 |
| 最近记录: |