当我在python3中执行json.dumps("\u0000", ensure_ascii=False)
时,我期望输出为3个字符串,特别是\u0000
字符的表示形式要用双引号引起来。这是我得到的:
print(json.dumps("\u0000", ensure_ascii=False))
"\u0000"
只是为了避免与我的终端有关的任何歧义
len(json.dumps("\u0000", ensure_ascii=False))
8
哪个是引号(2)+ 4个零和\ u(2)= 8个字符。
这似乎与其他UTF8字符的处理不一致:
print(json.dumps("\u4e2d", ensure_ascii=False))
"中"
len(json.dumps("\u4e2d", ensure_ascii=False))
3
我正在使用:
$ python3 -V
Python 3.7.1
\u0000
有什么特别之处吗?
答案 0 :(得分:1)
根据ECMA-404,必须在JSON字符串中转义以下字符(第9节):
引号(U + 0022),反斜线(U + 005C)和控制字符U + 0000至U + 001F。
其中有一些简短的转义序列,例如\n
和\\
,但没有空字符。该标准明确指出,您需要一个六个字符的序列来表示这样的字符。