无论如何都要在JavaScript中执行此操作:
$ cat test.json
{"body":"\u0000"}
$ python3 -c 'import json; print(json.load(open("test.json", "r")))'
{'body': '\x00'}
注意,上面的数据只有一个\
(不需要转义)。因此,您在JavaScript中遇到以下情况:
JSON.parse('{"body":"\\u0000"}') // works
JSON.parse('{"body":"\u0000"}') // does not work
可能有任何来自二进制源(websocket)的UTF-8数据,这些数据是否可以像上面第一个python示例一样直接处理?
答案 0 :(得分:0)
\u0000
到\u001F
的字符串字符被视为控制字符,根据RFC-7159,不允许在JSON中使用字符,必须对其进行转义,如{{3}所述}。
你要做的是将未转义的控制字符放入JSON中,这显然是不可接受的,你必须首先逃避它,非语言接受它,甚至Python。
正确的答案是将UTF-8编码的值放入包含JSON格式的字符串中。
这是一个正确的JSON,将由任何语言的任何JSON解析器解析,即使在JavaScript中也是如此:
{"body":"\u0000"}
这是不正确的 JSON(将[NUL]
视为NUL控制字符,因为它无法在文本中表示):
{"body":"[NUL]"}
这就是为什么JSON.parse('{"body":"\\u0000"}')
有效而JSON.parse('{"body":"\u0000"}')
无效。
希望,它澄清了你的测试有什么问题。