JSON,Unicode:检测\uxxx中的XXXX与Unicode字符不对应的方法?
JSON规范规定可以使用以下符号对字符进行转义:\uxxx(其中XXXX是四个十六进制数字) 但是,并非每组四个十六进制数字都对应于Unicode字符JSON,Unicode:检测\uxxx中的XXXX与Unicode字符不对应的方法?,json,unicode,escaping,character,non-unicode,Json,Unicode,Escaping,Character,Non Unicode,JSON规范规定可以使用以下符号对字符进行转义:\uxxx(其中XXXX是四个十六进制数字) 但是,并非每组四个十六进制数字都对应于Unicode字符 是否有工具可以扫描JSON文档以检测\uxxx的存在,其中XXXX不对应于任何Unicode字符?更一般地说,如何确定\uxxx不对应于任何Unicode字符?当JSON规范谈到Unicode字符时,它实际上意味着Unicode码点。每个有效的\uxxx序列都表示一个有效的码点,因为\uxxx可以表示高达U+FFFF的码点,但Unicode定义了
是否有工具可以扫描JSON文档以检测\uxxx的存在,其中XXXX不对应于任何Unicode字符?更一般地说,如何确定\uxxx不对应于任何Unicode字符?当JSON规范谈到Unicode字符时,它实际上意味着Unicode码点。每个有效的
\uxxx
序列都表示一个有效的码点,因为\uxxx
可以表示高达U+FFFF的码点,但Unicode定义了高达U+10FFFF的码点
当不使用转义十六进制表示法时,可以像在JSON中一样使用整个Unicode代码点范围。另一方面,当使用转义十六进制表示法时,只允许使用高达U+FFFF的代码点。但这是可以的,因为U+FFFF以上的代码点必须使用UTF-16代理项对来表示,该代理项对由两个代码点组成,这两个代码点都适合一起作用于\uxxx
范围。这在以下章节中进行了描述:
任何字符都可以转义如果字符在基本字符中
多语言平面(U+0000到U+FFFF),则可能是
表示为六个字符的序列:一个反向索利多金币,后跟
由小写字母u,后跟四个十六进制数字
编码字符的代码点。十六进制字母A
F可以是大写或小写。例如,一个字符串包含
只有一个反向索利多士字符可以表示为
“\u005C”
转义不在基本多语言中的扩展字符
平面,字符表示为12个字符的序列,
编码UTF-16代理项对。例如,一个字符串
仅包含G谱号字符(U+1D11E)的字符可以表示为
“\uD834\uDD1E”
因此,您的问题不应该是“是否\uxxx
对应于Unicode字符?”,因为从逻辑上讲,它总是对应于Unicode字符,因为所有值0x0000-0xFFFF都是有效的Unicode码点。真正的问题应该是“是否\uxxx
对应于BMP中的Unicode码点,如果不是,它是否属于对应于有效UTF-16代理的\uxxx\uxxx
对?”