我有一个包含文本字段title
和text
的类块。当我想要打印它们时,我得到(惊讶,惊讶!)UnicodeDecodeError
。当我尝试格式化输出字符串时,它给出了一个错误,但是当我只是连接文本和标题并返回它时,我没有得到任何错误:
class Chunk:
# init, fields, ...
# this implementation will give me an error
def __str__( self ):
return u'{0} {1}'.format ( enc(self.text), enc(self.title) )
# but this is OK - all is printed without error
def __str__( self ):
return enc(self.text) + enc(self.title)
def enc(x):
return x.encode('utf-8','ignore') # tried many combinations of arguments...
c = Chunk()
c.text, c.title = ... # feed from external file
print c
范!错误!
return u'{0} {1}'.format ( enc(self.text), enc(self.title) )
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 2844: ordinal not in range(128)
我认为我使用了encode
/ decode
/ utf-8
/ ascii
/ replace
/ ignore
/的所有可能组合。
(python unicode问题真的恼人!)
答案 0 :(得分:4)
__unicode__
, not __str__
。无需调用.encode()
,因为输入已经是unicode。只需写下
def __unicode__(self):
return u"{0} {1}".format(self.text, self.title)
答案 1 :(得分:3)
避免2.x python的unicode问题的最简单方法是将整体编码设置为utf-8,否则这些问题将在突发的地方不断出现:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')