2011-11-03 104 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字符?那么你将如何处理它们被编码的字节[]?