Workspace 下为所有工作区设置默认编码,如 Iulian Dragos 的回答所示。 在项目属性中(右-6ren">
gpt4 book ai didi

scala - Scala 编译器是否适用于 UTF-8 编码的源文件?

转载 作者:行者123 更新时间:2023-12-01 07:56:44 24 4
gpt4 key购买 nike

我有一个非常简单的 Scala 代码

 var str = "≤"
for( ch <- str ) { printf("%d, %x", ch.toInt, ch.toInt) ; println }
println
str = "\u2264" ;
for( ch <- str ) { printf("%d, %x", ch.toInt, ch.toInt) ; println }

如果浏览器没有正确显示,第一个字符串在双引号之间包含一个字符,即小于或等于符号 U+2264。

程序输出
8218, 201a
226, e2
167, a7

8804, 2264

显然,第一个字符串在运行时是 3 个字符长,而不是源文件中的 1 个字符长。

源文件以 UTF-8 格式存储。十六进制转储显示它被正确编码,第一个字符串是 22 E2 89 A4 22。我正在使用 Eclipse 和 Eclipse 的 Scala 插件。
  • scala 编译器是否接受以 UTF-8 编码的输入文件?
  • 如果是这样,为什么我的程序会产生意想不到的结果?
  • 最佳答案

    回答我自己的问题:

    Does the scala compiler work with UTF-8 encoded files?



    是的,但前提是它知道它们是 UTF-8 编码的。在没有任何其他证据的情况下,它使用 Java 的 file.encoding属性(property)。 (感谢@AndreasNeumann 提供了这部分答案。)

    Why did my program not behave as I expected?



    因为我的 file.encoding属性设置为 MacRoman .尽管我已经告诉 eclipse 该文件是 UTF-8,但该信息并未传达给 Scala 编译器。因此,编译器根据 MacRoman 将 3 字节序列 E2 89 A4 解释为三字符序列。编码:一个较低的单引号(看起来很像逗号)、一个“a”抑扬符和一个节符号。这 3 个字符序列的 unicode 是 U+201A U+00E2 U+00A7,它解释了我的程序的输出。

    How do you fix the problem?



    关于 command line for scalac 使用选项 -encoding UTF-8 .在 Eclipse 中,您可以使用 Scala 插件的首选项(选项)来添加此选项。 (感谢@Jesper 提供了这部分答案。)您还可以使用 -D scalac 上的选项命令行或通过 JAVA_OPTS设置 file.encoding 的环境变量属性(property)。 (有关详细信息,请参阅@AndreasNeumann 的回答。)

    如果您使用 Scala IDE for Eclipse ,您至少可以做三件事。
  • 一种是在 Eclipse 的全局首选项(或选项)中的 General >> Workspace 下为所有工作区设置默认编码,如 Iulian Dragos 的回答所示。
  • 在项目属性中(右键单击包资源管理器中的项目并选择 Properties ),在 Resource 下首选项,选择 UTF-8 作为 Text file encoding .
  • 最后,您可以添加 -encoding UTF-8additional command line parameters在首选项(或选项)中的 Compiler >> Scala 下。您可以将其设置为全局首选项(或选项)或项目特定的属性设置。
    Image of Eclipse preferences dialog
  • 关于scala - Scala 编译器是否适用于 UTF-8 编码的源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224219/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com