10

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')

但我仍然会遇到类似的错误。有人可以指出一个适当的解决方案。并且编解码器也会剥离工作。如果冲突字节没有作为字符串写入文件,我没有问题,因此接受丢失。

4

2 回答 2

11

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

from django.utils.encoding import smart_str, smart_unicode

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

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

pip install Django
于 2013-03-12T14:54:12.143 回答
9

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

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

但这会删除任何不是 ASCII 的东西。也许您想编码为更合适的编码,例如 UTF-8?

你可能想阅读 Python 和 Unicode:

于 2013-03-12T14:42:30.087 回答