Java字符转换

时间:2011-11-03 21:36:14

标签: java string encoding

所以基本上我正在尝试将ISO-8859-2中的字符转换为windows-1250。不幸的是,java编码器/解码器类似乎都没有解决我的问题。

我现在正在做的是:

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

它实际上会转换序列,但不会转换为正确的字符。

-59,-124 (ń)变为 -61,-79 ,是否应该成为 241 或< I> -24 的

3 个答案:

答案 0 :(得分:5)

想要将Java字符串从一种编码转换为另一种编码是根本错误的 - 字符串是字符的抽象,与编码无关(主要是)。

在Java中,编码用于在字节和字符串之间进行转换的配方。如果要从ISO-8859-2转换为windows-1250,则需要从字节开始,使用ISO-8859-2将它们转换为String,并使用windows-1250将其转换回字节。这可以使用InputStreamReader/Writernew String(bytes, encoding)string.getBytes(encoding)

来完成

答案 1 :(得分:2)

字符串内的编码始终相同(UTF-16),因此您的代码会混淆。它将一个字符替换为另一个字符,它不会转换编码。

此外,此代码取决于源文件的编码。最好使用“\ u0144”而不是“ń”。

将字符串转换为字节时实现编码,如

str.getBytes("Cp1250")

答案 2 :(得分:2)

Echo Ingo的回答。也许一大堆代码将展示正在发生的事情:

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字符,谁想要使用windows-1250字符?那么你将如何处理它们被编码的byte []?