Как полностью очистить строку недопустимых символов в python? - PullRequest
5 голосов
/ 16 декабря 2009

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

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

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

print str_with_weird_char

стрионг появится в моем терминале с бриллиантом "?" вместо странного персонажа. Если я скопирую и вставлю эту строку в 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 это выглядит так:

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

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

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

Ответы [ 2 ]

9 голосов
/ 16 декабря 2009

Вы можете пропустить "ignore", чтобы пропустить недопустимые символы в .encode / .decode как "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'
>>>
3 голосов
/ 17 июля 2013

Объявите кодировку во второй строке вашего скрипта. Это действительно должно быть вторым. Как

#!/usr/bin/python
# coding=utf-8

Этого может быть достаточно, чтобы решить проблему самостоятельно. Если нет, см. Str.encode ('utf-8') и str.decode ('utf-8').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...