我看了从官方文档的HOWTO on Unicode和一个完整的,非常详细article为好。不过,我不明白为什么它会抛出我这个错误。UnicodeEncodeError:“ASCII”编解码器不能编码字符[...]
以下是我尝试:我打开一个包含字符的ASCII出范围(但里面XML允许范围)的XML文件。我用cfg = codecs.open(filename, encoding='utf-8, mode='r')
这样做运行良好。用repr()
查看字符串也显示了一个unicode字符串。
现在我继续前进,阅读了parseString(cfg.read().encode('utf-8')
。当然,我的XML文件以这个开头:<?xml version="1.0" encoding="utf-8"?>
。虽然我认为它不相关,但我也为我的python脚本定义了utf-8,但由于我不直接在其中编写unicode字符,因此这里不适用。以下行相同:from __future__ import unicode_literals
这也是正确的开始。
接下来的事情我通过生成的对象,以我自己的类在那里我阅读标签到这样的变量:xmldata.getElementsByTagName(tagName)[0].firstChild.data
并将其分配给在我班上的一个变量。
现在什么完美的作品是那些命令(obj是一个类的实例):
for element in obj:
print element
而这个命令不会工作,以及:
print obj.__repr__()
我定义__iter__()
只得到每而__repr__()
使用典型的printf东西:"%s" % self.varname
这两个命令打印完美,可以输出t他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__()
从技术文档我得到这个
'print obj'将使用该对象的'__str__',而不是'__repr__'。 – BrenBarn
你的默认编码是什么?我的意思是* sys.getdefaultencoding()* –
@BrenBarn:__str__实现为返回__repr __() – javex