在帶有Java 1.5的Mac OS X 10.5上,我有這段代碼片段。如何使西里爾字符顯示正確的字符串?
public static void main(String[] args) {
String name = "Алексей";
System.out.println("name = " + name);
}
輸出是:
name = ???????
我期望看到:
name = Алексей
我怎樣才能做到這一點?
在帶有Java 1.5的Mac OS X 10.5上,我有這段代碼片段。如何使西里爾字符顯示正確的字符串?
public static void main(String[] args) {
String name = "Алексей";
System.out.println("name = " + name);
}
輸出是:
name = ???????
我期望看到:
name = Алексей
我怎樣才能做到這一點?
感謝所有有用的想法。
原來的關鍵,我的問題是這樣的句子:
在的Mac OS X 10.5與Java 1.5,我有這樣的代碼片段
的IDE我使用,IntelliJ IDEA明確地將文件編碼設置爲MacRoman。通過將項目的編碼更改爲UTF-8,問題即可解決,無需更改任何代碼。
這裏有兩個潛在的問題。首先,你的源代碼中有西里爾字符。這意味着您必須確保您用來存儲文件的編碼與編譯器使用的編碼相同。查看javac聯機幫助頁,查看其默認編碼是什麼,和/或如何指定特定的編碼。或者,在你的字符串中使用Unicode轉義符。
第二種可能性是您的終端字體不顯示西里爾文字符。但是,我不認爲這是發生了什麼,因爲(1)您能夠看到源代碼中的字符,並且(2)我認爲丟失的字形呈現爲塊,不正確的編碼呈現爲問號。
要測試,只需用正確的Unicode轉義替換字符串,並驗證屏幕上的字符呈現。
如果使用控制檯類,而不是System.out的,而你是真的真的很幸運,你MIGHT能夠得到控制檯打印西裏爾字母。
但是一般來說,控制檯沒有很好的字符集支持。
以某種其他方式輸出字符串要可靠得多。將其打印到Swing組件。
如果您的字符串是從某處動態獲取的,並且您需要確保它是根據需要進行編碼的,請使用一些String類構造函數,將Charset類型作爲參數來轉換該字符串。