【问题标题】:UnicodeEncodeError, can't seem to set errors='ignore'UnicodeEncodeError,似乎无法设置errors='ignore'
【发布时间】:2015-04-19 14:58:05
【问题描述】:

我对 Python 还很陌生,所以我希望这是一些我只是想念的简单的东西。

我在 Windows 7 上运行 Python 2.7

我正在尝试通过命令行运行一个基本的 twitter 抓取程序。但是我不断收到以下错误:

File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 79: character maps to (undefined)

我基本上明白这里发生了什么,它试图在 cp437 中打印到控制台,并且它被它抓取的推文中的 unicode 字符弄糊涂了。

我要做的就是让它用“?”替换这些字符。或者只是让它完全删除这些字符。我已经阅读了很多关于此的帖子,但我不知道该怎么做。

我打开了错误中引用的 cp437.py 文件,并将所有 errors='strict' 更改为 errors='ignore',但这并没有解决问题。

然后我尝试进入 C:\Python27\Lib\codecs.py 文件并将所有errors='strict' 更改为errors='ignore',但这也没有解决问题。

有什么想法吗?就像我说的,希望我只是缺少一些基本的东西,但我已经阅读了很多关于这方面的帖子,但我似乎无法理解它。

非常感谢。 赛斯

【问题讨论】:

标签: python python-2.7 unicode stdout


【解决方案1】:

我不建议更改内置库 - 它们旨在允许处理编码错误而无需摆弄(如果您有更改,则不再清楚任何适用于其他人的解决方案是否适用你)。

您可能只想将errors='ignore' 传递到您正在使用的任何编码函数中以跳过错误字符,或者将errors='replace' 用字符\ufff 替换该字符以表示存在问题。 [ error='strict' 是默认值,如果你不传递任何值。 ]

但是,如果您要打印到命令行,您可能不希望编码为 un​​icode,而是使用 ASCII - 因为 unicode 包含命令行无法打印的字符。 (我怀疑是导致错误抛出的原因,而不是您从 Twitter 获得的响应中存在非标准的 unicode 字符)。

试试例如

 print original_data.encode('ascii', 'ignore')

【讨论】:

  • 谢谢。那是一个更容易的解决方案。我刚刚陷入了一个我需要远离的兔子洞。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多