UnicodeEncodeError:'ascii'编解码器无法以特殊名称对字符进行编码

rhb*_*hb1 64 python unicode encoding ascii beautifulsoup

我的python(ver 2.7)脚本运行良好,从本地html文件中获取一些公司名称,但是当涉及到某个特定的国家/地区名称时,它会出现此错误"UnicodeEncodeError:'ascii'compodec无法编码字符"

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

公司名称:KühlfixKälteanlagenIng.GerhardDoczekal&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)
Run Code Online (Sandbox Code Playgroud)

错误在这行代码中给出:

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)
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 221

尝试utf-8在脚本开头设置系统默认编码,以便使用该编码对所有字符串进行编码.

示例 -

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)

以上应将默认编码设置为utf-8.

  • 使用`export PYTHONIOENCODING = UTF-8`对我有用 (12认同)
  • 这适用于Python 2.x,但它不是一个很好的方法,在Python 3中不推荐使用.更好地实际解码/编码数据.请参阅[我们为什么不在py脚本中使用sys.setdefaultencoding("utf-8")的讨论](http://stackoverflow.com/questions/3828723/why-should-we-not-use-sys-setdefaultencodingutf -8-IN-A-PY-脚本) (10认同)
  • 这不起作用:`module'sys'没有属性'setdefaultencoding' (7认同)
  • 哇 !!!它很有效,非常感谢! (6认同)
  • @MartyMacGyver,完全正确,这可能会破坏库并导致很难找到错误.甚至没有提到这一事实使得这是一个非常危险的答案. (5认同)

Dav*_*len 35

你真的想这样做

flog.write("\nCompany Name: "+ pCompanyName.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

这是此unicode演示文稿中描述的"编码延迟"策略(幻灯片32到35).

  • 这是正确的方法,应该是公认的答案. (6认同)