当前位置: 首页 > 面试题库 >

JSON.stringify是否不转义Unicode字符?

谷梁嘉悦
2023-03-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();
​

虽然我希望根据JSON规范将非ASCII字符转义为\ uXXXX
,但它们似乎未受影响。这是我从上述测试中获得的输出:

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

我使用的是Chrome,因此应该是本机JSON.stringify实现。页面的编码为UTF-8。非ASCII字符不应该转义吗?

首先让我参加此测试的是,我注意到jQuery.ajax当非ASCII字符出现在数据对象属性中时,它们似乎并没有转义。这些字符似乎以UTF-8的形式传输。


问题答案:

的JSON规范不从Unicode字符需要转换为转义序列。“除“或\或控制字符之外的任何UNICODE字符。”被定义为有效的JSON序列化字符串:

json字符串格式



 类似资料:
  • 我有一个简单的UTF-8测试页面,其中包含多个不同语言字母的文本将字符串化为JSON: http://jsfiddle.net/Mhgy5/ 超文本标记语言: JavaScript: 虽然我希望根据 JSON 规范将非 ASCII 字符转义为 \uXXXX,但它们似乎未被触及。这是我从上面的测试中得到的输出: 我用的是Chrome,所以应该是本机实现,页面的编码是UTF-8,不是应该转义非ASCI

  • 问题内容: 我使用函数对AJAX发送到PHP的JS对象进行字符串化处理。 当JSON.stringify函数将Unicode字符编码为格式(例如)时,就会出现问题。我的问题是如何在PHP中将这些字符转换为常规unicode字符? 问题答案: 看到输出UTF-16?有点卡住 这将转换为UTF-8:

  • 问题内容: 在解析包含unicode转义序列的json字符串时,存在一个长期存在的错误。似乎需要修复该错误,这种错误可能很快就不会发生,因此我正在寻找一种在R中创建解决方法的方法,该方法在将序列提供给json解析器之前先取消序列化。 一些上下文:json数据始终是unicode,默认情况下使用,因此通常不需要转义。但是出于历史原因,json确实支持转义的unicode。因此json数据 和 是等效

  • 我需要将输入字符串中的unicode字符转义为UTF-16或UTF-32转义序列。例如,输入字符串文字< code >“吃,喝,愛" 应该转义为< code >“吃喝,\ u611b”。以下是排序表中的规则: Escape | Unicode码位 “\u” 十六进制 十六进制 十六进制|U 到 U FFFF 范围内的 Unicode 代码点(包括与编码的十六进制值相对应)。 '\U'HEX HEX

  • 在JSON中,Unicode字符可以使用表示法进行转义。我假设显然是指十六进制的Unicode代码点。 但由于只有4位数字,这是否意味着无法转义

  • 问题内容: 如果您有一个带有unicode字符的字符串,则可以打印它,并获得未转义的版本: 但是如果我们有一个包含上面字符串的列表并打印出来: 您仍然会获得转义的字符序列。您如何才能使列表的内容不被转义,这可能吗?像这样: 另外,如果字符串是类型,那么您如何与上述相同? 问题答案: 打印字符串时,将获得对象方法的输出- 在这种情况下,该字符串不带引号。列表的方法不同,它创建一个包含打开和关闭的字符