Python unicode字符__

2024-04-25 00:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用他们的suit unicode字符和值来打印卡片。我试着做到以下几点:

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

就像在另一个thread中建议的那样,但是我一直收到错误消息说UnicodeEncodeError: ascii, ♠, 0, 1, ordinal not in range(128)。什么时候我可以打印出一个字符列表?在


Tags: self消息returndef错误unicode字符thread
3条回答

根据您如何将这些“西装符号”编码成字节字符串,您需要通过提及适当的编解码器来为其生成unicode字符串(例如,thebytestr.decode('latin-1')如果拉丁语是您编码它的方式!),然后对该unicode字符串进行utf-8编码。只是unicode(something)使用默认编码,这是ASCII,因此完全不知道任何“套装符号”!-)在

正如我当时(3个月前)说过的,我会实现__unicode__,而不是{},但这只是简单性的一个小问题。更确切地说,核心是:如果您的字节字符串包含有限的ASCII编码之外的任何内容,您必须知道您的字节字符串使用什么编码,并通过显式使用该编解码器将其解码回Unicode!在

我运行同样的代码

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

和13;
和13;

这个UnicodeEncodeError到底发生在哪里?我可以考虑两个可能的问题:

  • UnicodeEncodeError出现在__unicode__方法中。

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

你的类中有__unicode__方法吗?在

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

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

似乎有用。你能试着在你的主机上打印出来吗?也许你的控制台编码是问题所在。在

相关问题 更多 >