【问题标题】:UnicodeEncodeError: 'ascii' codec can't encode character at special name [duplicate]UnicodeEncodeError:'ascii'编解码器无法对特殊名称的字符进行编码[重复]
【发布时间】:2015-09-17 04:58:43
【问题描述】:

我的 python (ver 2.7) 脚本运行良好,可以从本地 html 文件中获取一些公司名称,但是当涉及到一些特定的国家名称时,它会给出这个错误“UnicodeEncodeError: 'ascii' codec can't encode character”

当这个公司名称出现时特别出错

公司名称:Kühlfix Kälteanlagen Ing.Gerhard Doczekal & Co. KG

链接无法处理

Traceback (most recent call last): 
  File "C:\Python27\Process2.py", line 261, in <module>
    flog.write("\nCompany Name: "+str(pCompanyName))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 9: ordinal not in range(128)

这行代码出错:

if companyAlreadyKnown == 0:
   for hit in soup2.findAll("h1"):
       print "Company Name: "+hit.text
       pCompanyName = hit.text
       flog.write("\nCompany Name: "+str(pCompanyName))
       companyObj.setCompanyName(pCompanyName)

【问题讨论】:

标签: python unicode encoding beautifulsoup ascii


【解决方案1】:

尝试在脚本开始时将系统默认编码设置为utf-8,以便所有字符串都使用该编码。

例子-

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

上面应该设置默认编码为utf-8

【讨论】:

  • 现在我面临另一个错误兄弟!回溯(最后一次调用):文件“C:\Python27\Process2.py”,第 261 行,在 中打印“公司名称:”+hit.text 文件“C:\Python27\lib\encodings\cp437. py",第 12 行,在编码中返回 codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode character u'\xae' in position 2 8: character maps to
  • 这适用于 Python 2.x,但它不是解决此问题的好方法,并且在 Python 3 中已被弃用。更好地实际解码/编码数据。请参阅Why should we NOT use sys.setdefaultencoding(“utf-8”) in a py script 的讨论
  • @MartyMacGyver,完全正确,这可能会破坏库并导致难以找到错误。甚至没有提到这一点的事实使得这是一个非常危险的答案。
  • 这不起作用:module 'sys' has no attribute 'setdefaultencoding'
  • 使用 export PYTHONIOENCODING=UTF-8 对我有用
【解决方案2】:

你真的很想这样做

flog.write("\nCompany Name: "+ pCompanyName.encode('utf-8'))

这是unicode presentation(幻灯片 32 到 35)中描述的“延迟编码”策略。

【讨论】:

  • 这是正确的方法,应该是公认的答案。
  • 正确方法——正确答案
猜你喜欢
  • 2015-10-21
  • 2010-12-11
  • 2012-07-02
  • 2010-12-11
  • 2021-09-28
  • 2017-02-01
  • 2016-12-17
相关资源
最近更新 更多