【问题标题】:Java Convert strange string to Burmese language stringJava将奇怪的字符串转换为缅甸语字符串
【发布时间】:2015-07-01 13:19:09
【问题描述】:

您好,我的示例代码是这样的;

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 将其移动到一个字节数组,它仍然是“”á€á€á€•္ပံနဲ့”。然后您将该 UTF-8 字节数组转换为我们的 ASCI,它仍然是 ""á€á€á€•္ပံá€"ဲ့"
  • @ReneM。事实上,这个字符串来自一个 json 对象
  • 然后以正确的编码读取json。
  • @ReneM。我读起来像“HttpEntity ent = response.getEntity(); text = EntityUtils.toString(ent,"UTF-8");”但它仍然得到奇怪的字符
  • 响应是 UTF-8 吗?检查标题

标签: java utf-8 fonts utf


【解决方案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 组成。

【讨论】:

  • 控制台上的结果:??ိပ်ပံနဲ့
  • 这就是你应该看到的。原始字符串中的前四个字符不对应有效的 UTF-8 字节,因为缅甸字符在 UTF-8 中被编码为三个字节,而不是两个;这就是为什么你会看到“�?”。其余为缅甸文字。我不会说这种语言,但谷歌翻译说它的意思是“范围从交换”。
  • 但我的意思是我怎么能看到像那张照片这样的字符:postimg.org/image/ch19nnenj
  • 这与您的代码无关。您需要一个包含缅甸字符的字体。我相信谷歌搜索会发现一些。
猜你喜欢
  • 2013-03-10
  • 2014-04-26
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多