加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala编译器是否与UTF-8编码的源文件一起使用?

发布时间:2020-12-16 10:06:29 所属栏目:安全 来源:网络整理
导读:我有一个非常简单的 Scala代码 var str = "≤" for( ch - str ) { printf("%d,%x",ch.toInt,ch.toInt) ; println } println str = "u2264" ; for( ch - str ) { printf("%d,ch.toInt) ; println } 如果在您的浏览器上没有正确显示,则第一个字符串包含一个字
我有一个非常简单的 Scala代码

var str = "≤"
 for( ch <- str ) { printf("%d,%x",ch.toInt,ch.toInt) ; println  }
 println
 str = "u2264" ;
 for( ch <- str ) { printf("%d,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属性. (感谢@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这部分答案.)您还可以在scalac命令行或通过JAVA_OPTS环境变量使用-D选项来设置file.encoding属性. (详情请参阅@AndreasNeumann的答案.)

如果你使用Scala IDE for Eclipse,你至少可以做三件事.

>一种是在General>>下为所有工作区设置默认编码. Eclipse的全局首选项(或选项)中的工作区,如Iulian Dragos的回答所示.>在项目属性中(右键单击Package Explorer中的项目并选择Properties),在Resource preferences下,选择UTF-8作为Text文件编码.>最后,您可以在Compiler>>下的其他命令行参数下添加-encoding UTF-8. Scala中的首选项(或选项).您可以将其设置为全局首选项(或选项)或项目特定属性设置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读