UTF-8に、複数の異なる言語の文字を含むテキストがJSONに文字列化される簡単なテストページがあります。
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として送信されているようです。