Maven项目中.java文件的源代码编码,存储在Subversion中,主要是ASCII,有些文件是UTF-8。
我认为这意味着这些文件将是UTF-8。在pom文件中,源编码指定为UTF-8。
现在我们的构建失败了,我们的SonarQube分析在.java文件上失败,该文件是ISO-8859并且具有带特殊字符的变量。使用特殊字符并不是一个好主意,但除此之外,java文件是否应该具有一致(UTF-8)编码?
或者大多数是ASCII并且只有一些是UTF-8并不重要吗?这个想法很重要吗?
我不明白这些文件是如何以ASCII编码结束的。当我使用像SublimeText这样的IDE或编辑器时,文件最终为UTF-8。
ASCII我只有在MS Windows上使用NotePad才能得到。 Java开发人员通常不会将其用于编程。
我们是否应该将源文件更改为使用UTF-8?或者它可能很重要,我们可以保留原样吗?
举个例子。使用MS Windows我使用SublimeText创建一个文件,使用Notepad.exe创建一个文件。我将文本1234Ï
放在这些文件中。该文字包含一个带有两个圆点的特殊字符。
当我使用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
转换成功,因为消息不完整字符已消失。
答案 0 :(得分:2)
七位ASCII是UTF-8的子集。 ISO-8859-1是拉丁文1,有8位有问题的字节。
所以有人使用编辑器或IDE来处理UTF-8。某些版本控制签入将文本替换回源,但在您的情况下似乎不是这种情况。
UTF-8是一个不错的选择,但需要一些小心。