嗨,我的示例代码如下;
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,有解决办法吗?谢谢
最佳答案
真正的问题是服务器发送回的内容要么使用错误的字符集,要么使用双重编码。如果可能的话,您应该解决这个问题。
与此同时,您的想法是正确的 - 将错误编码的文本转换为正确的字符集。
字符串中的每个字符显然应该是一个单字节,它是 UTF-8 字节序列的一部分。您实际上看到的是这些单个字节中的每一个都被视为 Windows cp1252 中的字符。 charset,并相应地转换为 Java char。
因此,您首先要将字符从 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。
关于Java 将奇怪的字符串转换为缅甸语字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31162549/