Я читаю некоторые данные, кодированные utf-8, из файла:
with open (filename, 'rb') as f:
bytes= f.read(offset, length)
#bytes is b'hello\x00\x00\x00\x00'
text = bytes.decode('utf-8')
#text is 'hello '
stripped_text = text.strip()
#stripped_text is 'hello '
Вы можете воссоздать это с помощью простой строки, например
thing = b'hello\x00\x00\x00\x00'.decode('utf8').strip()
print(thing)
#the output is 'hello '
Как вы можете видеть, конечные нулевые символы не разделяются - я предполагаю, что это имеет какое-то отношение к '\ x00', которое не распознается.strip(), но везде, где я выгляжу, кажется, кажется, что это должно быть. Что дает? Как я могу удалить эти символы без необходимости делать что-то очень неуклюжие?
Я не мог найти сообщение, которое рассматривало бы эту проблему.
NUL не являются пробелами, поэтому strip()
без аргументов не будет их лишать. Вместо этого вы должны использовать strip('\0')
:
>>> 'hello\0\0\0\0'.strip('\0')
'hello'
strip()
- это набор символов для удаления.'\0'
- это еще один способ обозначения'\x00'
, символа NUL (первый использует восьмеричный escape, второй - шестнадцатеричный escape; см. Таблицы здесь для получения дополнительной информации).