所以基本上我試圖將字符從ISO-8859-2轉換爲Windows-1250。不幸的是,沒有一個java編碼器/解碼器類似乎解決了我的問題。Java字符轉換
我目前做的是:
str = str.replace("ń", new String(new char[]{241}));
它實際上是轉換序列,而不是正確的字符。
-59,-124(N)變得 -61,-79,是不是應該成爲任一或 -24?
所以基本上我試圖將字符從ISO-8859-2轉換爲Windows-1250。不幸的是,沒有一個java編碼器/解碼器類似乎解決了我的問題。Java字符轉換
我目前做的是:
str = str.replace("ń", new String(new char[]{241}));
它實際上是轉換序列,而不是正確的字符。
-59,-124(N)變得 -61,-79,是不是應該成爲任一或 -24?
想要將Java字符串從一種編碼轉換爲另一種編碼基本上是錯誤的 - 字符串是字符的抽象,與編碼無關(主要是)。
在Java中,編碼用於在字節和字符串之間進行轉換的配方。如果你想從ISO-8859-2轉換到windows-1250,你需要從字節開始,使用ISO-8859-2將它們轉換爲字符串,並使用windows-1250將其轉換回字節。這可以通過使用InputStreamReader/Writer
或new String(bytes, encoding)
和string.getBytes(encoding)
字符串中的編碼始終是相同的(UTF-16),因此您的代碼會感到困惑。它將一個字符替換爲另一個字符,但不會轉換編碼。
此外,此代碼取決於您的源文件的編碼。最好使用「\ u0144」而不是「ñ」。在
str.getBytes("Cp1250")
回聲英戈的回答將字符串轉換爲字節時,像
編碼是實現。也許是一段代碼,將展示所發生的事情:
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字符?那麼你將如何處理它們被編碼的字節[]?