簡體   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