Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven java项目中文件的源代码编码_Java_Maven_Encoding_Utf 8 - Fatal编程技术网

Maven java项目中文件的源代码编码

Maven java项目中文件的源代码编码,java,maven,encoding,utf-8,Java,Maven,Encoding,Utf 8,我们的Maven项目中.java文件的源代码存储在Subversion中,大部分是ASCII,一些文件是UTF-8 我认为目的是这些文件将是UTF-8。在pom文件中,源编码指定为UTF-8 现在我们的构建失败了,特别是我们的SonarQube分析在一个.java文件上失败了,该文件是ISO-8859,并且有一个带有特殊字符的变量。使用一个特殊字符不是一个好主意,但是撇开它不谈,java文件不应该有一致的(UTF-8)编码吗 或者大多数是ASCII,只有一些是UTF-8,这不重要吗?重要的是思想

我们的Maven项目中.java文件的源代码存储在Subversion中,大部分是ASCII,一些文件是UTF-8

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

现在我们的构建失败了,特别是我们的SonarQube分析在一个.java文件上失败了,该文件是ISO-8859,并且有一个带有特殊字符的变量。使用一个特殊字符不是一个好主意,但是撇开它不谈,java文件不应该有一致的(UTF-8)编码吗

或者大多数是ASCII,只有一些是UTF-8,这不重要吗?重要的是思想

顺便说一句,我不明白这些文件是如何以ASCII编码结束的。当我使用IDE或类似SublimateText的编辑器时,文件最终会变成UTF-8

我只在MS Windows上使用记事本时获得ASCII码。Java开发人员通常不会将其用于编程

我们是否应该将源文件更改为使用UTF-8?或者也许这不重要,我们可以保持现状

举个例子。我使用MS Windows创建了一个使用SublimiteText的文件和一个使用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$ 
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
我可以使用SublimitText打开并保存文件
notepad.txt
,编码仍然显示为ISO-8859

字符在两个文件中都显示正确。因此,这支持了这样一种观点,即编辑器试图在某个地方根据文件内容确定编码。但在其他地方,该文件仍被标记并识别为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$ 
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位字节

所以有人用编辑器或IDE处理UTF-8。一些版本控制签入将文本替换回源代码,但在您的情况下,情况似乎并非如此


UTF-8是一个可靠的选择,但需要注意。

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

所以有人用编辑器或IDE处理UTF-8。一些版本控制签入将文本替换回源代码,但在您的情况下,情况似乎并非如此


UTF-8是一个可靠的选择,但需要注意。

与ASCII兼容。任何包含ASCII字符的文件也是有效的UTF-8文件。(这就是UTF-8几乎适用于所有产品的原因之一)。此外,字符编码不是文件本身的属性。它是从一个文件的内容中检测到的。当我创建一个带有几个普通字符的升华文本文件时,它会显示为UTF-8。在MS Windows上使用记事本创建的具有相同字符的文件显示为ISO-8859。这是因为编辑只是猜测编码是什么,他们选择了一个似乎适合这些编码之一的文件。“普通文本”可以同样有效地解释为ASCII、UTF-8或ISO-8859-1。这取决于编辑对适当编码的猜测,不同的编辑可能有不同的规则从内容中猜测编码。与ASCII兼容。任何包含ASCII字符的文件也是有效的UTF-8文件。(这就是UTF-8几乎适用于所有产品的原因之一)。此外,字符编码不是文件本身的属性。它是从一个文件的内容中检测到的。当我创建一个带有几个普通字符的升华文本文件时,它会显示为UTF-8。在MS Windows上使用记事本创建的具有相同字符的文件显示为ISO-8859。这是因为编辑只是猜测编码是什么,他们选择了一个似乎适合这些编码之一的文件。“普通文本”可以同样有效地解释为ASCII、UTF-8或ISO-8859-1。这取决于编辑对适当编码的猜测,不同的编辑可能有不同的规则从内容中猜测编码。