“ascii”编解码器无法在位置*处对字符进行编码,ord不在范围(128)内

2024-03-29 07:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

stackoverflow上有一些线程,但我找不到解决整个问题的有效方法。

我从urllib read函数收集了大量文本数据,并将它们存储在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')

但我最终还是犯了类似的错误。 有人能指出正确的解决办法吗。 也会编解码器剥离工作。 如果冲突字节不是作为字符串写入文件,则我没有问题,因此可以接受丢失。


Tags: 文件数据方法函数textinread字节
2条回答

您的数据是unicode数据。要将其写入文件,请使用.encode()

text = text.encode('ascii', 'ignore')

但这将删除任何不是ASCII的内容。也许你想编码成更合适的编码,比如UTF-8?

您可能需要阅读Python和Unicode:

你可以通过Django模块的smart_str来完成。试试这个:

from django.utils.encoding import smart_str, smart_unicode

text = u'\u2019'
print smart_str(text)

您可以通过以管理员权限启动命令shell来安装Django,并运行以下命令:

pip install Django

相关问题 更多 >