Ate*_*ral 10 javascript unicode json
我有一个简单的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>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
?$("#encode").click(function () {
$("#out").text(JSON.stringify({ txt: $("#txt").val() }));
}).click();
?
Run Code Online (Sandbox Code Playgroud)
虽然我希望根据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传输.
okh*_*rch 12
事实上 JSON.stringify 不会转义 utf8:
\nJSON.stringify({a:"\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!"})\n{"a":"\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!"}\nRun Code Online (Sandbox Code Playgroud)\n但我在通过 Perl DBD::Mysql 存储 JSON 然后将其检索回来时遇到了问题。\n我发现按照建议通过 \\uXXXX 转义所有非 ASCII 和不可见字符更安全。\n以下是方法
\nfunction jsonEscapeUTF(s) {return s.replace(/[^\\x20-\\x7F]/g, x => "\\\\u" + ("000"+x.codePointAt(0).toString(16)).slice(-4))}\n\njsonEscapeUTF(JSON.stringify({a:"\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!"}))\n"{"a":"\\u041f\\u0440\\u0438\\u0432\\u0435\\u0442!"}"\nRun Code Online (Sandbox Code Playgroud)\n希望它会有所帮助。
\n你问题的简短回答是否定的; JSON.stringify不应该逃避你的字符串.
虽然如果用编码保存HTML文件但是没有声明它是utf8文件,处理utf8字符串会显得很奇怪.utf-8
例如:
<!doctype html>
<html>
<head>
<title></title>
<script>
var data="árvízt?r? tükörfúrógép ÁRVÍZT?R? TÜKÖRFÚRÓGÉP";
alert(JSON.stringify(data));
</script>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
这会引起警觉"árvÃztűrÅ‘ tükörfúrógép ÃRVÃZTŰRÅ TÜKÖRFÚRÓGÉP".
但是,如果您将以下行添加到标题:
<meta charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)
然后,警报将是人们可以期待的:"árvízt?r? tükörfúrógép ÁRVÍZT?R? TÜKÖRFÚRÓGÉP".
| 归档时间: |
|
| 查看次数: |
28249 次 |
| 最近记录: |