我看了從官方文檔的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