У меня есть функция моей программы, где пользователь может загрузить файл 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"), независимо от того, что это подбрасывает ошибку.
Что я могу сделать это, получают эту вещь быть рабочей строкой?
Вы можете передать, "игнорировать", чтобы пропустить недопустимые символы в .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'
>>>