[英]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.