2010-07-22 34 views
4

錯誤我有下面的類在Java中,其輸出「Hello World」,在葡萄牙語:Java的Unicode字符在cmd中

public class PrintUnicode { 
    public static void main(String[] args) { 
     System.out.println("Olá Mundo!"); 
    } 
} 

我使用Eclipse,所以我出口該項目運行的JAR文件。之後,我去了cmd(Windows 7)並運行生成的jar文件。

結果是:

Olß Mundo! 

有一種簡單的方法來避免這個錯誤?

+0

在Eclipse中,您可以設置Java源代碼的編碼。如果你不這樣做,編譯器會假設默認編碼和文本可能會出錯。 – Kwebble 2010-07-22 07:30:42

+0

我相信這不是原因。即使您更改文件編碼,錯誤仍然存​​在。使用System.out處理unicode字符時,這是一個Java問題。請參閱下面的答案。 – fjsj 2010-07-22 19:03:06

回答

5

找到解決方案。只是更改爲:

public class PrintUnicode { 
    public static void main(String[] args) { 
     System.console().printf("Olá Mundo!"); 
    } 
} 

與System.out的錯誤發生的原因是:

默認情況下,Java的編碼字符串中的默認代碼 頁面發送 到System.out。在Windows XP上,這意味着 有損轉換爲「ANSI」代碼 頁面。這很不幸,因爲 Windows命令提示符(cmd.exe)可以通過 讀寫Unicode字符。 (source here

+1

我已經通過手動編碼解決了這個問題:'System.out.write(myStr.getBytes(consoleCharset));'但這樣好多了。 – helios 2010-07-22 06:24:12