Странное поведение `json.dumps` для символа \ u0000 - PullRequest
2 голосов
/ 24 июня 2019

Когда я выполняю json.dumps("\u0000", ensure_ascii=False) в python3, я ожидаю, что вывод будет строкой из 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 Ответ

1 голос
/ 24 июня 2019

Согласно ECMA-404 , следующие символы должны быть экранированы в строке JSON (раздел 9):

кавычка (U + 0022), обратный солидус(U + 005C) и управляющие символы от U + 0000 до U + 001F.

Существуют короткие escape-последовательности, такие как \n и \\ для некоторых из них, но длянулевой символ.Стандарт прямо заявляет, что вам нужна шестизначная последовательность для представления такого символа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...