【问题标题】:Unicode to String in java but trickyJava中的Unicode到String但很棘手
【发布时间】:2013-02-12 14:25:10
【问题描述】:

我正在使用其 API 从网站获取数据,该 API 以 JSON 格式返回数据。 问题在于JSON 中有一些变音符号。它将返回其UNICODE,例如Münich 将是 Mu\u0308nich

当我将此JSON 字符串传递给org.codehaus.jettison.json.JSONObject 的构造函数时,Mu\u0308nich 被转换为Munich (n has an umlaut)。错了。

我很晚才意识到这一点(在获取整个数据之后)。现在我使用以下方法将其转换回Unicode 形式,即我将Munich (n has an umlaut) 传递给该方法并返回Mu\u0308nich

我想以某种方式将此Mu\u0308nich 转换为Münich。有任何想法吗?

请注意,只有u\u0308üo\u0308öa\u0308ä 等需要转换。

用于转换回来的方法 -

public static String escapeUnicode(String input) {
    StringBuilder b = new StringBuilder(input.length());
    Formatter f = new Formatter(b);
    for (char c : input.toCharArray()) {
        if (c < 128) {
            b.append(c);
        } else {
            f.format("\\u%04x", (int) c);
        }
    }
    return b.toString();
}

【问题讨论】:

  • chen如何改成nich,在慕尼黑和慕辰?
  • @nhahtdh 错字。对不起。已更正。
  • 我认为元音变音取决于程序如何显示它(元音变音是一个单独的字符)。某些程序将无法正确显示字符。
  • @nhahtdh - 问题是在某些情况下我已经有了“正确的”,即慕尼黑。现在,当我尝试将它与这个 n umlaut 数据匹配时。我不工作。

标签: java regex unicode


【解决方案1】:

这些称为Diacritics,您可以使用Normalizer 将变音符号组合成单个Unicode 字符。

使用normalize 方法和表单NFKC。这将首先将完整的字符串分解为变音符号,然后进行组合以返回“真实”的 unicode 变音符号。

所以:“München”保持“München”,“Mu\u0308nchen”将变为“München”

然后您将拥有单一格式的字符串,不再使用变音符号,并且易于携带和显示。

如果您使用来自不同平台的文本,一些规范化是至关重要的,否则您最终会遇到您所描述的问题。

【讨论】:

  • 他不想摆脱他们。他希望它能够正确显示。
  • 他说:我想以某种方式将这个 Mu\u0308nich 转换为 Münich。有任何想法吗?而上面的方法正是这样做的。
  • 对不起,我想你应该说“将它们组合成一个字符”而不是“摆脱”。
  • 已编辑,您是对的。组合声音比“摆脱”更好。
猜你喜欢
  • 2017-01-03
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2011-08-16
相关资源
最近更新 更多