如何通过json解析器和编码器处理转义的unicode?

Arg*_*ror 8 unicode json

json规范允许在json字符串(格式为\ uXXXX)中转义unicode.它特别提到受限制的代码点(非字符)作为有效的转义代码点.这是否意味着解析器应该从包含非字符和受限制的代码点的字符串生成非法的unicode?

一个例子:

{ "key": "\uFDD0" }
Run Code Online (Sandbox Code Playgroud)

对此进行解码要么您的解析器不会尝试解释转义的代码点,也不会生成无效的unicode字符串.不是吗?

Ada*_*ode 5

当你进行解码,似乎这将是对一个合适的使用Unicode替换字符,U+FFFD.

Unicode字符数据库:

  • 用于替换Unicode中未知或不可表示的值的传入字符
  • 比较使用U + 001A作为控制字符来表示替代功能


bob*_*nce 3

\xe2\x80\x9crestricted codepoint\xe2\x80\x9d 是什么意思?您正在查看使用该语言的哪个规范?(我找不到这样的。)

\n\n

如果您谈论的是代理,那么是的:JavaScript 对代理几乎一无所知(*),并将任何序列中的所有 UTF-16 代码点视为有效。JSON 仅限于 JavaScript 支持的内容,具有相同的功能。

\n\n

*:我能想到的 JS 中唯一对代理项有特殊作用的部分是encodeURIComponent 函数,因为它使用 UTF-8 编码,其中尝试对无效代理项序列进行编码是行不通的。如果您尝试:

\n\n
encodeURIComponent('\\ud834\\udd1e'.substring(0, 1))\n
Run Code Online (Sandbox Code Playgroud)\n\n

你会得到一个例外。

\n\n

(哎呀!SO好像不允许直接发布基础多语言位面之外的字符。啧。)

\n