3

我有一个带有文本字段titletext. 当我想打印它们时,我得到了(惊喜,惊喜!)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 问题真的很烦人!)

4

2 回答 2

4
  1. 当您返回 unicode 时,您应该覆盖__unicode__,而不是。__str__
  2. 无需调用.encode(),因为输入已经是 unicode。写吧

    def __unicode__(self):
        return u"{0} {1}".format(self.text, self.title)
    
于 2012-11-06T07:28:07.710 回答
3

避免2.x python的unicode问题最简单的方法就是将整体编码设置为utf-8,否则这样的问题会在突然出现的地方不断出现:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
于 2012-11-06T07:33:14.297 回答