Как полностью санировать строку запрещенных символов в Python?

У меня есть функция моей программы, где пользователь может загрузить файл CSV, который моя программа проходит и использует в качестве входа. У меня есть один пользователь, жалующийся на проблему, где его вход подбрасывает ошибку. Ошибка вызывается, там будучи запрещенным символом, который кодируется неправильно. Символы ниже:

Иногда это появляется как ромб с a"?" в середине иногда это появляется как двойной ромб с"?" в середине иногда это появляется как "\xa0", и иногда это появляется как "\xa0\xa0".

В моей программе, если я делаю:

print str_with_weird_char

Строка обнаружится в моем терминале с ромбом"?" вместо странного символа. Если я copy+paste, которые представляют в виде строки в ipython, он выйдет с этим сообщением:

In [1]: g="blah��blah"
WARNING: 
********
You or a %run:ed script called sys.stdin.close() or sys.stdout.close()!
Exiting IPython!

заметить как ромб"?" является двойным теперь. По некоторым причинам copy+paste заставляет его удвоиться...

В django traceback страница, это похоже на это:

UnicodeDecodeError at /chris/import.html
('ascii', 'blah \xa0 BLAH', 14, 15, 'ordinal not in range(128)')

Вещь, которая портит меня, состоит в том, что я ничего не могу сделать с этой строкой без него выдающий исключение. Я попробовал unicode (), я попробовал ул. (), я попробовал .encode (), я попробовал .encode ("utf-8"), независимо от того, что это подбрасывает ошибку.

Что я могу сделать это, получают эту вещь быть рабочей строкой?

5
задан Speedphoenix 24 July 2019 в 18:21
поделиться

1 ответ

Вы можете передать, "игнорировать", чтобы пропустить недопустимые символы в .encode / .decode like "ILLEGAL".decode("utf8","ignore")

>>> "ILLEGA\xa0L".decode("utf8")
...
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 6: unexpected code byte

>>> "ILLEGA\xa0L".decode("utf8","ignore")
u'ILLEGAL'
>>>
9
ответ дан 13 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: