繁体   English   中英

Maven Java项目中文件的源编码

[英]Source encoding of files in Maven java project

我们的Maven项目中.java文件的源编码(大多数存储在Subversion中)为ASCII,有些文件为UTF-8。

我认为目的是使这些文件为UTF-8。 在pom文件中,源编码指定为UTF-8。

现在,我们的构建特别失败了,我们的SonarQube分析在一个.java文件上失败了,该文件是ISO-8859,并且文件中带有特殊字符。 使用特殊字符不是一个好主意,但除此之外,java文件是否应该具有一致的(UTF-8)编码?

还是大多数不是ASCII的而只有少数是UTF-8的呢? 重要的是思想吗?

我不明白这些文件如何以ASCII编码结尾。 当我使用IDE或类似SublimeText的编辑器时,文件最终以UTF-8格式出现。

仅在MS Windows上使用NotePad时才获得ASCII。 Java开发人员通常不会将其用于编程。

我们是否应该将源文件更改为使用UTF-8? 还是没关系,我们可以保留原样吗?

举个例子。 使用MS Windows,我使用SublimeText创建一个文件,并使用Notepad.exe创建一个文件。 我在这些文件中添加了文本1234Ï 文本包含带有两个点的特殊字符I。

当我在Linux上使用file查看这些文件时

ostraaten@io:/tmp/iconv$ file sublimtext.txt 
sublimtext.txt: UTF-8 Unicode (with BOM) text, with no line terminators
ostraaten@io:/tmp/iconv$ file notepad.txt 
notepad.txt: ISO-8859 text, with no line terminators
ostraaten@io:/tmp/iconv$ 

因此,这表明记事本将文件保存为ISO-8859,而不管其内容如何。 当我使用iconv检查文件时

ostraaten@io:/tmp/iconv$ iconv -f UTF-8 notepad.txt -o /dev/null 
iconv: incomplete character or shift sequence at end of buffer
ostraaten@io:/tmp/iconv$ iconv -f UTF-8 sublimtext.txt -o /dev/null 
ostraaten@io:/tmp/iconv$ 

我可以使用SublimeText打开并保存文件notepad.txt ,其编码仍然显示为ISO-8859。

该字符在两个文件中均正确显示。 因此,这支持以下想法:编辑器尝试在某处尝试根据文件内容确定编码。 但是该文件仍然在其他地方被标记为ISO-8859。

我可以使用iconv更改编码

ostraaten@io:/tmp/iconv$ iconv -f ISO-8859-15 -t UTF-8 notepad.txt > notepad-utf8.txt
ostraaten@io:/tmp/iconv$ file notepad-utf8.txt 
notepad-utf8.txt: UTF-8 Unicode text, with no line terminators
ostraaten@io:/tmp/iconv$ 
straaten@io:/tmp/iconv$ iconv -f UTF-8 notepad-utf8.txt -o /dev/null

转换成功,因为消息不完整字符消失了。

七位ASCII是UTF-8的子集。 ISO-8859-1是拉丁文1,带有大约8位有问题的字节。

因此,有人使用UTF-8与编辑器或IDE一起工作。 一些版本控制签入将文本替换回源中,但是在您的情况下似乎并非如此。

UTF-8是一个不错的选择,尽管需要谨慎。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM