2024-04-25 00:28:19 发布
网友
我试着用他们的suit unicode字符和值来打印卡片。我试着做到以下几点:
def __str__(self): return u'\u2660'.encode('utf-8')
就像在另一个thread中建议的那样,但是我一直收到错误消息说UnicodeEncodeError: ascii, ♠, 0, 1, ordinal not in range(128)。什么时候我可以打印出一个字符列表?在
UnicodeEncodeError: ascii, ♠, 0, 1, ordinal not in range(128)
根据您如何将这些“西装符号”编码成字节字符串,您需要通过提及适当的编解码器来为其生成unicode字符串(例如,thebytestr.decode('latin-1')如果拉丁语是您编码它的方式!),然后对该unicode字符串进行utf-8编码。只是unicode(something)使用默认编码,这是ASCII,因此完全不知道任何“套装符号”!-)在
thebytestr.decode('latin-1')
utf-8
unicode(something)
正如我当时(3个月前)说过的,我会实现__unicode__,而不是{},但这只是简单性的一个小问题。更确切地说,核心是:如果您的字节字符串包含有限的ASCII编码之外的任何内容,您必须知道您的字节字符串使用什么编码,并通过显式使用该编解码器将其解码回Unicode!在
__unicode__
我运行同样的代码
>>> u'\u2660'.encode('utf-8') '\xe2\x99\xa0' >>> print ('\xe2\x99\xa0') â™
这个UnicodeEncodeError到底发生在哪里?我可以考虑两个可能的问题:
UnicodeEncodeError
UnicodeEncodeError出现在__unicode__方法中。
您的__unicode__方法返回一个字节字符串而不是unicode对象,并且该字节字符串包含非ASCII字符。
你的类中有__unicode__方法吗?在
我根据您评论中的实际数据在Python控制台上尝试过:
>>> u'\u2660'.encode('utf-8') '\xe2\x99\xa0' >>> print '\xe2\x99\xa0' ♠
似乎有用。你能试着在你的主机上打印出来吗?也许你的控制台编码是问题所在。在
根据您如何将这些“西装符号”编码成字节字符串,您需要通过提及适当的编解码器来为其生成unicode字符串(例如,
thebytestr.decode('latin-1')
如果拉丁语是您编码它的方式!),然后对该unicode字符串进行utf-8
编码。只是unicode(something)
使用默认编码,这是ASCII,因此完全不知道任何“套装符号”!-)在正如我当时(3个月前)说过的,我会实现},但这只是简单性的一个小问题。更确切地说,核心是:如果您的字节字符串包含有限的ASCII编码之外的任何内容,您必须知道您的字节字符串使用什么编码,并通过显式使用该编解码器将其解码回Unicode!在
__unicode__
,而不是{我运行同样的代码
>>> u'\u2660'.encode('utf-8') '\xe2\x99\xa0' >>> print ('\xe2\x99\xa0') â™
;这个
UnicodeEncodeError
到底发生在哪里?我可以考虑两个可能的问题:UnicodeEncodeError
出现在__unicode__
方法中。您的
__unicode__
方法返回一个字节字符串而不是unicode对象,并且该字节字符串包含非ASCII字符。你的类中有
__unicode__
方法吗?在我根据您评论中的实际数据在Python控制台上尝试过:
似乎有用。你能试着在你的主机上打印出来吗?也许你的控制台编码是问题所在。在