我有一个简单的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();
我预期根据JSON规范,非ASCII字符会被转义为\uXXXX,但它们似乎没有被转义。这是上面测试的输出结果:
{"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形式传输。