Кодек 'ascii' не может кодировать символ в позиции * ord не в диапазоне (128)
В stackoverflow есть несколько потоков, но я не смог найти правильное решение проблемы в целом.
Я собрал огромные суммы текстовых данных из функции чтения urllib и сохранил их в файлах pickle.
Теперь я хочу записать эти данные в файл.
Во время написания я получаю ошибки, похожие на -
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
и многие данные теряются.
Я полагаю, что данные с чтения urllib являются байтовыми данными
Я пробовал
1. text=text.decode('ascii','ignore')
2. s=filter(lambda x: x in string.printable, s)
3. text=u''+text
text=text.decode().encode('utf-8')
но все же я получаю подобные ошибки.
Может ли кто-нибудь указать правильное решение.
А также будут работать кодеки.
У меня нет проблем, если байты конфликта не записываются в файл в виде строки, следовательно, потеря принимается.
Ответы
Ответ 1
Вы можете сделать это через smart_str
модуля Django
. Просто попробуйте следующее:
from django.utils.encoding import smart_str, smart_unicode
text = u'\u2019'
print smart_str(text)
Вы можете установить Django, запустив командную оболочку с правами администратора и выполните следующую команду:
pip install Django
Ответ 2
Ваши данные - данные в формате Юникод. Чтобы записать это в файл, используйте .encode()
:
text = text.encode('ascii', 'ignore')
но это приведет к удалению чего-либо, что не является ASCII. Возможно, вы хотели кодировать более подходящую кодировку, например UTF-8?
Вы можете прочитать на Python и Unicode: