您的示例代码就像;
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,是否存在瑕疵?感谢
答案 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组成。