\ u0000字符的json.dumps的奇怪行为

时间:2019-06-24 06:28:31

标签: python json utf-8

当我在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有什么特别之处吗?

1 个答案:

答案 0 :(得分:1)

根据ECMA-404,必须在JSON字符串中转义以下字符(第9节):

  

引号(U + 0022),反斜线(U + 005C)和控制字符U + 0000至U + 001F。

其中有一些简短的转义序列,例如\n\\,但没有空字符。该标准明确指出,您需要一个六个字符的序列来表示这样的字符。