0

JSONデータをフォーマットで返すAPIを使用して、Webサイトからデータを取得していました。問題は、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\u0308nichたいMünich。何か案は?

u\u0308変換が必要なのはtoü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

これらは分音記号と呼ばれ、ノーマライザーを使用して分音記号を 1 つの Unicode 文字に結合できます。

normalizeメソッドを Form として使用しますNFKC。これは、最初に完全な文字列を分音符号に分解し、次に合成を行って「実際の」ユニコード ウムラウトを返します。

つまり、「München」は「München」のままで、「Mu\u0308nchen」は「München」になります。

これで、分音記号を使用しなくなり、簡単に移植および表示できる単一の形式の文字列が得られます。

異なるプラットフォームのテキストを扱う場合、何らかの正規化が不可欠です。そうしないと、説明した問題が発生します。

于 2013-02-12T14:37:45.770 に答える