Python UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符[…]
我已经阅读了官方文件和一个完整的,非常详细的。我还是不明白为什么它会给我这个错误 以下是我的尝试:我打开一个XML文件,其中包含超出ASCII范围(但在允许的XML范围内)的字符。我使用运行良好的Python UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符[…],python,unicode,Python,Unicode,我已经阅读了官方文件和一个完整的,非常详细的。我还是不明白为什么它会给我这个错误 以下是我的尝试:我打开一个XML文件,其中包含超出ASCII范围(但在允许的XML范围内)的字符。我使用运行良好的cfg=codecs.open(filename,encoding='utf-8,mode='r')来实现这一点。使用repr()查看字符串也会显示一个unicode字符串 现在我继续用parseString(cfg.read().encode('utf-8')读取它。当然,我的XML文件是从以下内容开
cfg=codecs.open(filename,encoding='utf-8,mode='r')
来实现这一点。使用repr()
查看字符串也会显示一个unicode字符串
现在我继续用parseString(cfg.read().encode('utf-8')读取它。当然,我的XML文件是从以下内容开始的:
。虽然我认为它不相关,但我也为python脚本定义了utf-8,但因为我没有直接在其中写入unicode字符,所以这不应适用于这里。下面的行也是如此:来自_u未来u。导入unicode文本
,这也是正确的局数
接下来,我将生成的对象传递给我自己的类,在其中我将标记读入如下变量:xmldata.getElementsByTagName(tagName)[0].firstChild.data
,并将其分配给类中的一个变量
现在,这些命令(obj是该类的一个实例)最有效:
这个命令也可以工作:
print obj.__repr__()
我定义了\uuuuu iter\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
这两个命令都可以完美打印,并可以输出unicode字符。
不起作用的是:
print obj
现在我被困住了,因为这让我感到恐惧
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 47:
那么,我遗漏了什么?我做错了什么?我正在寻找一个通用的解决方案,我总是希望将字符串作为unicode处理,只是为了避免任何可能的错误并编写一个兼容的程序
编辑:我还定义了:
def __str__(self):
return self.__repr__()
def __unicode__(self):
return self.__repr__()
从文档中我得到了这个问题,我终于解决了。问题是(我不知道为什么)如果你直接调用\uuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
本身)
最后的帮助来自于此。当我使用utf-8编码时,我已经到了让它打印到控制台的步骤(但是一个错误的字母)。通过定义以下内容,最终解决了这个问题:
def __str__(self):
return self.__repr__().encode(stdout.encoding)
现在剩下的唯一一个悬而未决的问题是:为什么打印obj.\uuu str\uuu()
和打印obj
与此不同?这对我来说毫无意义。是的,再次强调一下:调用前者或\uu repr\uu()
确实有效。而且显式编码仍然有效。print obj
将使用对象的\uuuuu str\uuuuuu
。默认编码是什么?我的意思是sys.getdefaultencoding()@BrenBarn:str作为return实现@MaksymPolshcha:根据功能,它是ascii。我真的建议大家看一下Pycon 2012实用Unicode的演讲,或者,我该如何停止这种痛苦?帮助文章不再提供了
def __str__(self):
return self.__repr__().encode(stdout.encoding)