Кодек '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: