__str__中的Python unicode字符

时间:2009-11-23 03:11:28

标签: python string unicode

我正在尝试使用套装unicode字符及其值来打印卡片。我试着做以下事情:

def __str__(self):
    return u'\u2660'.encode('utf-8')

与另一个thread中的建议相似,但我一直收到错误UnicodeEncodeError: ascii, ♠, 0, 1, ordinal not in range(128)。当我打印一张卡片列表时,我该怎么做才能让这些套装角色出现?

3 个答案:

答案 0 :(得分:3)

UnicodeEncodeError究竟出现在哪里?我可以在这里考虑两个可能的问题:

  • UnicodeEncodeError方法中出现__unicode__

  • 您的__unicode__方法返回一个字节字符串而不是一个unicode对象,该字节字符串包含非ASCII字符。

你班上有__unicode__方法吗?

我根据您评论中的实际数据在Python控制台上尝试了这个:

>>> u'\u2660'.encode('utf-8')
'\xe2\x99\xa0'
>>> print '\xe2\x99\xa0'
♠

似乎有效。你可以尝试在控制台上打印相同的内容吗?也许你的控制台编码就是问题。

答案 1 :(得分:2)

根据您将这些“套装符号”编码为字节字符串的方式,您需要通过提及相应的编解码器(例如,如果latin-1为thebytestr.decode('latin-1'))来为其创建unicode字符串。在对该unicode字符串进行utf-8编码之前,如何对其进行编码!)只有unicode(something)使用默认编码,即ASCII,因此完全不知道任何“套装符号”! - )

正如我当时所说(3个月前),我会去实施__unicode__而不是__str__,但这只是一个简单的小问题。更重要的是:如果您的字节字符串包含有限ASCII编码之外的任何内容,您必须知道字节字符串使用的编码,并通过显式使用该编解码器将其解码回Unicode!

答案 2 :(得分:0)

我运行了相同的代码并获得了

>>> u'\u2660'.encode('utf-8')
'\xe2\x99\xa0'
>>> print ('\xe2\x99\xa0')
â™