【问题标题】:'ascii' codec can't encode character at position * ord not in range(128)'ascii' 编解码器无法在位置 * 或不在范围内编码字符(128)
【发布时间】:2013-03-12 22:54:12
【问题描述】:

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

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

【问题讨论】:

  • 你能显示text中的内容吗?

标签: python unicode decode encode


【解决方案1】:

您可以通过Django 模块的smart_str 来实现。试试这个:

from django.utils.encoding import smart_str, smart_unicode

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

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

pip install Django

【讨论】:

  • 结果与 encode('ascii','ignore') 惊人的相似
  • 两年后我可以说这个答案对python2.7有多么重要,对不起上面的不体谅评论^
【解决方案2】:

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

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

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

您可能想了解 Python 和 Unicode:

【讨论】:

  • 也许还有Say Hello to Unicode(无耻的插头:-))
  • @martijn-pieters 我注意到在写入数据库时​​我使用了 encode 函数。我在将内容再次转储到文本文件时不必要地进行了编码解码。但是有一些错误,可能是因为 utf 8 和 utf 16 冲突。你有什么建议吗?
  • @martjin-pieters - 如果错误仍然存​​在,我应该怎么做?
  • @minocha:仔细阅读链接的文章,以及您使用的任何数据库的文档。例如,数据库可能会原生处理 Unicode。
猜你喜欢
  • 2019-07-13
  • 2019-09-29
  • 2019-11-10
  • 2021-05-14
  • 2023-03-03
  • 1970-01-01
  • 2014-01-22
  • 2011-01-31
  • 1970-01-01
相关资源
最近更新 更多