Java将奇怪的字符串转换为缅甸语字符串

时间:2015-07-01 13:19:10

标签: java utf-8 fonts utf

您的示例代码就像;

String ln="á€á€­á€•á€¹á€•á€¶á€”ဲ့";
    try {
        byte[] b = ln.getBytes("UTF-8");
        String s = new String(b, "US-ASCII");
        System.out.println(s);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

当我运行它时,它不会打印出Brumese,是否存在瑕疵?感谢

1 个答案:

答案 0 :(得分:1)

真正的问题是服务器使用错误的字符集发送回内容,或者双重编码。如果可能的话,你应该修复它。

与此同时,您有正确的想法 - 将错误编码的文本转换为正确的字符集。

String中的每个字符显然都应该是单字节,它是UTF-8字节序列的一部分。您实际看到的是这些单个字节中的每一个都被视为Windows cp1252字符集中的字符,并相应地转换为Java字符。

因此,您首先要将cp1252中的字符转换回正确的字节:

byte[] b = ln.getBytes("cp1252");

现在您有一个真正的UTF-8字节序列,您可以将其转换为正确的字符串:

String s = new String(b, StandardCharsets.UTF_8);
// In Java 6, you must use:
//String s = new String(b, "UTF-8");

如果要解码或尝试生成缅甸字符或任何非英文字符,则不应使用US-ASCII。 ASCII仅由代码点0到127组成。