0

我正在使用其 API 从网站获取数据,该 API 以JSON格式返回数据。问题是当JSON. 它会返回它的UNICODE,例如Münich将是Mu\u0308nich

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

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

我想以某种方式将其转换Mu\u0308nichMünich. 有任何想法吗?

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

用于转换回来的方法 -

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();
}
4

1 回答 1

3

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

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

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

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

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

于 2013-02-12T14:37:45.770 回答