У меня есть простая тестовая страница в 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, будут экранированы как \uXXXX в соответствии с спецификацией JSON, они кажутся нетронутыми. Здесь вывод, который я получаю из вышеприведенного теста:
{"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 • खोजें\n"}
Я использую Chrome, поэтому это должна быть встроенная реализация JSON.stringify
. Кодировка страницы - UTF-8. Не следует ли избегать символов, отличных от ASCII?
Что привело меня к этому тесту, в первую очередь, я заметил, что jQuery.ajax
, похоже, не пропускает символы, отличные от ASCII, когда они появляются в свойстве объекта данных. Кажется, что символы передаются как UTF-8.