2011-11-03 40 views
1

所以基本上我試圖將字符從ISO-8859-2轉換爲Windows-1250。不幸的是,沒有一個java編碼器/解碼器類似乎解決了我的問題。Java字符轉換

我目前做的是:

str = str.replace("ń", new String(new char[]{241}));

它實際上是轉換序列,而不是正確的字符。

-59,-124(N)變得 -61,-79,是不是應該成爲任一或 -24

回答

5

想要將Java字符串從一種編碼轉換爲另一種編碼基本上是錯誤的 - 字符串是字符的抽象,與編碼無關(主要是)。

在Java中,編碼用於在字節和字符串之間進行轉換的配方。如果你想從ISO-8859-2轉換到windows-1250,你需要從字節開始,使用ISO-8859-2將它們轉換爲字符串,並使用windows-1250將其轉換回字節。這可以通過使用InputStreamReader/Writernew String(bytes, encoding)string.getBytes(encoding)

3

字符串中的編碼始終是相同的(UTF-16),因此您的代碼會感到困惑。它將一個字符替換爲另一個字符,但不會轉換編碼。

此外,此代碼取決於您的源文件的編碼。最好使用「\ u0144」而不是「ñ」。在

str.getBytes("Cp1250") 
2

回聲英戈的回答將字符串轉換爲字節時,像

編碼是實現。也許是一段代碼,將展示所發生的事情:

String defCharset = "ń"; 
String[] names = { "UTF-16BE", "UTF-8", "ISO-8859-2", "windows-1250" }; 
for(String name : names) { 
    byte[] bytes = defCharset.getBytes(name); 
    for(int i = 0; i < bytes.length; i++) { 
     System.out.printf("%s [%d]=%d\n", name, i, (int)(bytes[i] & 0xff)); 
    } 
} 

什麼你應該問的是誰提供了ISO-8859-2字符,誰願意消費窗戶-1250字符?那麼你將如何處理它們被編碼的字節[]?