Метод .strip () не удаляет загадочные пробельные символы - PullRequest
0 голосов
/ 29 августа 2018

Я читаю некоторые данные в кодировке 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 (), но везде, где я смотрю, кажется, что так и должно быть. Что дает? Как я могу удалить этих персонажей без необходимости делать что-то очень неуклюжее?

Я не смог найти сообщение, посвященное этой проблеме.

1 Ответ

0 голосов
/ 29 августа 2018

NUL не являются пробелами, поэтому strip() без аргументов не удалит их. Вместо этого вы должны использовать strip('\0'):

>>> 'hello\0\0\0\0'.strip('\0')
'hello'
...