Scala编译器是否可以使用UTF-8编码的源文件?

西奥多·诺维尔

我有一个非常简单的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 A422。我正在使用Eclipse和Eclipse的Scala插件。

  • Scala编译器是否接受以UTF-8编码的输入文件?
  • 如果是这样,为什么我的程序会产生意外的结果?
西奥多·诺维尔

要回答我自己的问题:

Scala编译器是否可以处理UTF-8编码的文件?

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

为什么我的程序无法按预期运行?

因为我的file.encoding媒体资源设置为MacRoman即使我告诉eclipse文件是UTF-8,该信息也没有传达给Scala编译器。因此,编译器根据MacRoman编码将3字节序列E2 89 A4解释为三个字符序列:一个较低的单引号(看起来很像一个逗号),一个“抑扬符”和一个节符号。这3个字符的序列的unicode是U + 201A U + 00E2 U + 00A7,它说明了我程序的输出。

您如何解决该问题?

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

如果将Scala IDE用于Eclipse,则至少可以做三件事。

  • 一种方法是在Eclipse的全局首选项(或选项)的General >> Workspace下,为所有工作区设置默认编码,如Iulian Dragos的答案所示。
  • 在项目属性中(在Package Explorer中右键单击该项目并选择Properties),在Resource首选项下,选择UTF-8作为Text file encoding
  • 最后,你可以加-encoding UTF-8additional command line parameters下编译>>斯卡拉在首选项(或选项)。您可以将其设置为全局首选项(或选项)或项目特定的属性设置。Eclipse首选项对话框的图像

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以使用各种编译器应用程序访问iOS上的文件?

来自分类Dev

是否可以使用ocamlopt ghc和gcc编译器创建可移植的x86-64 Linux可执行文件?

来自分类Dev

TFS合并冲突:应该使用哪种源文件编码?

来自分类Dev

Java源文件-编译后编码是否仍然有用?

来自分类Dev

视频片段是否可以以比源文件中的视频片段更高的比特率进行编码?

来自分类Dev

Avisynth不支持UTF-8源文件

来自分类Dev

clang ++链接失败:错误:源文件无效的UTF-8?

来自分类Dev

/ usr / bin / locale:源文件无效的UTF-8

来自分类Dev

Avisynth不支持UTF-8源文件

来自分类Dev

下载编码ServiceStack的CSV文件(UTF 8)

来自分类Dev

MSVC编译器是否有类似“ #pragma忽略此源文件”的内容?

来自分类Dev

MSVC编译器是否有类似“ #pragma忽略此源文件”的内容?

来自分类Dev

Java源文件-编译后编码仍然有用吗?

来自分类Dev

Excel使用UTF8编码与UTF8-Bom编码保存CSV文件的行为

来自分类Dev

Java编译器覆盖和处理源文件

来自分类Dev

Java编译器覆盖和处理源文件

来自分类Dev

如何使用checkstyle-plugin验证源文件中使用的编码?

来自分类Dev

是否可以指定sbt使用的scala编译器?

来自分类Dev

使用星号更改多个源文件的CMake编译器标志

来自分类Dev

如何使用qmake将编译器标志指定到单个源文件?

来自分类Dev

是否可以使用Paramiko指定文件的编码?

来自分类Dev

使用php脚本将ANSI编码的文件转换为UTF-8编码的文件?

来自分类Dev

SSH.NET:是否可以使用SFTP上传文件并保留源文件中的文件日期?

来自分类Dev

是否可以在子文件夹中运行他的打字稿编译器?

来自分类Dev

使用UTF-8编码保存XML文件

来自分类Dev

使用UTF-8编码读取XML文件

来自分类Dev

与Java编译器错误机器人工作室:字符串太大,编码使用UTF-8,而不是写为“STRING_TOO_LARGE”

来自分类Dev

可以使用VVC / VTM编码器/解码器支持编译ffmpeg吗?

来自分类Dev

无法编码的字符,用于编码ASCII,但是我的文件使用UTF-8

Related 相关文章

  1. 1

    是否可以使用各种编译器应用程序访问iOS上的文件?

  2. 2

    是否可以使用ocamlopt ghc和gcc编译器创建可移植的x86-64 Linux可执行文件?

  3. 3

    TFS合并冲突:应该使用哪种源文件编码?

  4. 4

    Java源文件-编译后编码是否仍然有用?

  5. 5

    视频片段是否可以以比源文件中的视频片段更高的比特率进行编码?

  6. 6

    Avisynth不支持UTF-8源文件

  7. 7

    clang ++链接失败:错误:源文件无效的UTF-8?

  8. 8

    / usr / bin / locale:源文件无效的UTF-8

  9. 9

    Avisynth不支持UTF-8源文件

  10. 10

    下载编码ServiceStack的CSV文件(UTF 8)

  11. 11

    MSVC编译器是否有类似“ #pragma忽略此源文件”的内容?

  12. 12

    MSVC编译器是否有类似“ #pragma忽略此源文件”的内容?

  13. 13

    Java源文件-编译后编码仍然有用吗?

  14. 14

    Excel使用UTF8编码与UTF8-Bom编码保存CSV文件的行为

  15. 15

    Java编译器覆盖和处理源文件

  16. 16

    Java编译器覆盖和处理源文件

  17. 17

    如何使用checkstyle-plugin验证源文件中使用的编码?

  18. 18

    是否可以指定sbt使用的scala编译器?

  19. 19

    使用星号更改多个源文件的CMake编译器标志

  20. 20

    如何使用qmake将编译器标志指定到单个源文件?

  21. 21

    是否可以使用Paramiko指定文件的编码?

  22. 22

    使用php脚本将ANSI编码的文件转换为UTF-8编码的文件?

  23. 23

    SSH.NET:是否可以使用SFTP上传文件并保留源文件中的文件日期?

  24. 24

    是否可以在子文件夹中运行他的打字稿编译器?

  25. 25

    使用UTF-8编码保存XML文件

  26. 26

    使用UTF-8编码读取XML文件

  27. 27

    与Java编译器错误机器人工作室:字符串太大,编码使用UTF-8,而不是写为“STRING_TOO_LARGE”

  28. 28

    可以使用VVC / VTM编码器/解码器支持编译ffmpeg吗?

  29. 29

    无法编码的字符,用于编码ASCII,但是我的文件使用UTF-8

热门标签

归档