2010-11-05 70 views
0

嗨 我有一個場景,我需要轉換默認字符集應該被重寫爲UTF-8。我正在下課。但是我沒有得到預期的產出。因爲我使用的是具有默認UTF-8字符集的unix系統,所以我比較了那裏的結果。我在這個計劃的某個地方錯了嗎?字符集轉換Java

public class CharsetDisplay { 

public static void main(String[] args) { 
    System.out.println(Charset.defaultCharset().name()); 
    System.out.println(Charset.isSupported("UTF-8")); 
    final Charset UTF8_CHARSET = Charset.forName("UTF-8"); 
    try { 
    byte[] byteArray = new byte[] {34,34,0}; 
    String str = new String(byteArray,UTF8_CHARSET); 
    System.out.println("String*** "+str); 
    System.out.println("String to Hex *** "+stringToHex(str)); 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
} 

} 

打印輸出

windows-1252 
true 
String*** "" 

注「」後的字符串輸出我有一個SPL字符,這是我沒有在UNIX ENV得到

+0

哎呀對不起的代碼片段丟失以上格式..只是#1刪除所有新行:( – javanerd 2010-11-05 12:01:21

+2

你想要做什麼?UTF-8中的字節'34 34 00'意味着'雙引號雙引號null',這就是你得到的。 – 2010-11-05 12:09:33

+0

因爲我看到輸出在eclipse中,我在雙引號後得到了一個特殊字符,現在我嘗試了通過命令提示符在dos中並且它工作正常,謝謝 – javanerd 2010-11-05 13:01:40

回答

2

你有什麼期望在這個環境中呈現的零字節?你的輸出對我來說完全正確。

不要忘記,您在環境之間遇到的任何差異可能不是Java。如果你從一個控制檯調用你的Java程序(我希望你是),那麼控制檯就可以將程序的輸出轉換爲你在屏幕上看到的內容。因此,根據字符集控制檯正在使用的情況,Java完全可以輸出您期望的字符,但控制檯無法正確呈現它們。

+0

感謝您的回覆,我使用eclipse並看到一個特殊字符,同一個程序運行在命令提示符下不給出特殊字符。所以我可以安全地假設輸出是基於控制檯的字符集。萬分感謝 :) – javanerd 2010-11-05 12:59:35

2

如果Java不正確地拿起您的語言環境的編碼,你可能要明確告訴它,在命令行:

java -Dfile.encoding=utf-8 CharsetDisplay