2016-05-29 84 views
0

Oracle的文檔狀態:java程序代碼的編碼是否影響編譯?

-encoding編碼

設置源文件編碼的名稱,如EUC-JP和UTF-8。如果未指定-encoding,則使用平臺默認轉換器。

我知道Mac OS X上的平臺默認轉換器是Mac Roman。但是當我用UTF-8編碼我的.java文件和許多其他編碼時,代碼編譯成功。我還嘗試強制javac從Mac Roman編碼的程序代碼讀取UTF-8和EUC-JP編碼,並且它也成功編譯。

這是怎麼發生的?我期望所有上述失敗。

+0

如果你只使用「基本」字符,編碼不會有很大的不同。 – jonrsharpe

+0

@jonrsharpe我使用hello world文檔測試過,但爲什麼?不同的編碼使用不同的二進制字符串來表示一個字符嗎? – Kun

+1

因爲ASCII字符32-127(英文字母,阿拉伯數字,基本標點符號)幾乎在任何地方都是一樣的。 http://www.joelonsoftware.com/articles/Unicode.html。嘗試將事物與更復雜的角色混合起來,它會開始變得有趣。 – jonrsharpe

回答

1

編譯並執行此代碼:

System.out.println("".length()); 

當文件被保存爲UTF-8和解釋爲這樣,將打印2中,由於笑臉需要兩個char s到被存儲。

當文件被解釋爲MacRoman時,它將打印4,因爲UTF-8編碼長度爲4個字節。

當您嘗試此(注意:您可以使用此代碼在單元測試,以確保正確的編碼。):

System.out.println(''); 

如編譯的MacRoman甚至不工作。

所以,只要所有的UTF-8內容都在字符串文字和註釋中,一切似乎都有效。