您好,感謝您閱讀我的文章。用BOM編譯(javac)UTF8編碼的Java源代碼
我的問題如下:我想編譯一個帶有「javac」的Java源文件,該文件是用BOM(操作系統爲WinXP)編碼的UTF-8。
下面是我做的:
1)創建一個文件用「記事本」,然後選擇UTF-8編碼
dos> notepad Test.java
"File -> Save as..."
File name : Test.java
Save as type: All Files
Encoding : UTF-8
Save
2)創建該文件中的Java類,並保存文件像1)
public class Test
{
public static void main(String [] args)
{
System.out.println("This is a test.");
}
}
3)可視化的文件的十六進制版本(第一行)
dos> xxd Test.java | head -1
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class
注: EF BB BF是UTF-8編碼的BOM(的UTF-16編碼BOM是FE FF)。
4)嘗試編譯這段代碼 「的javac」
dos> javac -encoding utf8 Test.java
Test.java:1: illegal character: \65279
?public class Test
^
1 error
注:是BOM的十進制版本。
我的問題是:我怎樣才能使這個編譯工作:
- 保持它的UTF-8編碼
- 並保持BOM?
謝謝你的幫助和問候。
LEA
是的:您必須刪除BOM。它在UTF-8上沒有任何業務,所以當然這是一個錯誤。這是一個長期存在的微軟錯誤。永遠不要把BOM放在UTF-8中!!!!! – tchrist 2012-03-21 20:56:42
你好。謝謝您的回答。 我使用「Notepad ++」將文件編碼爲「無BOM的UTF8」。 現在可以使用「javac」編譯代碼。 – 2012-03-22 09:20:09
@tchrist [Unicode標準(第30頁)](http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf)支持UTF-8中的BOM,因此您完全有權將它放在那裏如果你願意的話。爲什麼你想要另一個故事,但'javac'應該處理它。 – ArtB 2013-07-09 18:46:09