
ES 提案:格式正确的 JSON.stringify
由 Richard Gibson 提出的提案 “格式正确的 JSON.stringify” 是 ECMAScript 2019 的一部分。这篇博客文章解释它如何工作。
根据 JSON 的 RFC,如果你想使用 JSON,必须将参数编码为 UTF-8,那样的话使用 JSON.stringify()
有一个问题,因为它可能返回不能编码为 UTF-8 的 UTF-16 代码单元的结果。
怎么会发生这种事?如果是一个包含单独代理(lone surrogate)(范围在 0xD800–0xDFFF
内的 JavaScript 字符集)的 JavaScript 字符串,那么 JSON.stringify()
产生一个单独代理字符串:
console.log(JSON.stringify('\u{D800}') === '"\u{D800}"');
// -> false
单独的 UTF-16 代理字符不能编码为 UTF-8,这是为什么这个提案改变 JSON.stringify()
,以便通过代码单元转义序列表示它们:
console.log(JSON.stringify('\u{D800}') === '"\\ud800"');
// -> true
注意:JSON 提供代码单元转义序列(例如 \uD800
),但是不编码指向转义序列(例如 \u{D800}
)。
本文作者 Axel Rauschmayer,转载请注明来源链接:
原文链接:https://2ality.com/2019/01/well-formed-stringify.html
本文链接:https://tie.pub/2019/10/proposal-well-formed-stringify/