14

UTF-8に、複数の異なる言語の文字を含むテキストがJSONに文字列化される簡単なテストページがあります。

http://jsfiddle.net/Mhgy5/

HTML:

<textarea id="txt">
検索 • Busca • Sök • 搜尋 • Tìm kiếm • Пошук • Cerca • Søk • Haku • Hledání • Keresés • 찾기 • Cari • Ara • جستجو • Căutare • بحث • Hľadať • Søg • Serĉu • Претрага • Paieška • Poišči • Cari • חיפוש • Търсене • Іздеу • Bilatu • Suk • Bilnga • Traži • खोजें
</textarea>
<button id="encode">Encode</button>
<pre id="out">
</pre>

JavaScript:

​$("#encode").click(function () {
    $("#out").text(JSON.stringify({ txt: $("#txt").val() }));
}).click();
​

非ASCII文字はJSON仕様に従って\uXXXXとしてエスケープされると思いますが、変更されていないようです。上記のテストから得られる出力は次のとおりです。

{"txt":"検索•Busca•Sök•搜尋•Tìmkiếm•Пошук•Cerca•Søk•Haku•Hledání•Keresés•찾기•Cari•Ara•جستجو•Căutare•بحث•Hľadať •Poišči•Cari•חיפוש•Търсене•Іздеу•Bilatu•Suk•Bilnga•Traži•खोजें\n"}

Chromeを使用しているので、ネイティブJSON.stringify実装である必要があります。ページのエンコーディングはUTF-8です。非ASCII文字をエスケープするべきではありませんか?

そもそもこのテストに私を導いたのはjQuery.ajax、データオブジェクトプロパティに表示される非ASCII文字をエスケープしていないように見えることに気づきました。文字はUTF-8として送信されているようです。

4

5 に答える 5

36

JSON仕様では、Unicode文字からエスケープシーケンスへの変換は要求されていません。「「または\または制御文字。」以外のすべてのUNICODE文字は、有効なJSONシリアル化文字列として定義されています。

json文字列形式

于 2012-09-04T21:25:31.667 に答える
3

いいえ。JSONの推奨エンコーディングはUTF-8であるため、これらの文字をエスケープする必要はありません。

より安全にしたい場合、または別のエンコーディング(つまり、純粋なASCII)でJSONを明示的に送信したい場合は、Unicode文字をエスケープできますが、推奨事項に反します。

于 2012-09-04T21:26:11.210 に答える
1

あなたの主張は真実ではありません。JSON 文字列は Unicode コードポイント (「"」と「\」を除く) で構成されています。それだけです。JSON ドキュメント全体は、プロデューサーの裁量で UTF-8、UTF-16、または UTF-32 でエンコードできます。さらに、文字列コードポイントを文字どおりに含める代わりに、コードポイントの命名の代替形式を提供するエスケープシーケンスを含めることができます。

2 つの違いがまだわからない場合は、JSON で同じ文字列を記述する 2 つの異なる方法の例を次に示します。

  • "A"

  • "\u0041"

どちらのバージョンも、単一のコードポイント U+41 で構成される同じ文字列を表しますA

于 2012-09-04T21:29:11.457 に答える