В первом примере вы печатаете строку s
, и консоль игнорирует \x00
. Вы вводите print(s)
.
В последней строке вы получаете строку из приглашения python. Если вы напечатаете это: print(bytes(s,'utf-16').decode('utf-16'))
, вы получите то, что хотите.
Итак, подсказка Python покажет вам переменную с контекстом (например, вы также видите знаки '
), но не настоящие представление строки (которая у вас есть с print
).
ADDENDUM:
print
напечатает строку в своем аргументе, в конечном итоге вызывая str()
для преобразования аргумента в строка. Но приглашение python напечатает представление переменной (заданное с помощью repr()
. Таким образом, вы можете print(repr(bytes(s,'utf-16').decode('utf-16')))
получить ту же строку, что и в интерактивном сеансе python, но в виде строки. Вместо печати вы можете назначить такая функция (r = repr(bytes(...).decode(...))
, значит, у вас r[0]
это '
, r[1]
это \
, et c.