UnicodeEncodeError:'ascii'编解码器无法对特殊名称的字符进行编码[重复]

Posted

技术标签:

【中文标题】UnicodeEncodeError:\'ascii\'编解码器无法对特殊名称的字符进行编码[重复]【英文标题】: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)

【问题讨论】:

阅读bit.ly/unipain 任何来这里的人都应该访问***.com/questions/3828723/… 和***.com/questions/28657010/…,按照接受中的建议进行操作通常是非常糟糕的主意 无论您在哪里写入文件或从文件读取,都必须添加编码。 open("文件名", "w", encoding=''UTF-8") 【参考方案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)中描述的“延迟编码”策略。

【讨论】:

这是正确的方法,应该是公认的答案。 正确方法——正确答案

以上是关于UnicodeEncodeError:'ascii'编解码器无法对特殊名称的字符进行编码[重复]的主要内容,如果未能解决你的问题,请参考以下文章

UnicodeEncodeError: 'ascii' 编解码器无法编码字符 u'\u2026'

UnicodeEncodeError: 'ascii' 编解码器无法编码字符 u'\u2013'

UnicodeEncodeError:'ascii'编解码器无法对特殊名称的字符进行编码[重复]

UnicodeEncodeError:'ascii' 编解码器无法在位置 0 编码字符 u'\xef':序数不在范围内(128)

UnicodeEncodeError:'ascii'编解码器无法在位置 3 编码字符 u'\ufffd':序数不在范围内(128)[重复]

UnicodeEncodeError:“ascii”编解码器无法在位置 126 编码字符 u'\u2019':序数不在范围内(128)