代码之家  ›  专栏  ›  技术社区  ›  sharvey

字符串中的python unicode字符__

  •  0
  • sharvey  · 技术社区  · 15 年前

    我正在尝试使用他们的套装Unicode字符和值打印卡片。我试图做到以下几点:

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

    就像另一个建议一样 thread 但是我总是会出错说 UnicodeEncodeError: ascii, ♠, 0, 1, ordinal not in range(128) . 当我打印卡片列表时,我该怎么做才能让这些合适的角色出现?

    3 回复  |  直到 9 年前
        1
  •  3
  •   fviktor    15 年前

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

    • 这个 单码编码错误 发生在你身上 __unicode__ 方法。

    • 你的 阿伊努埃德埃希 方法返回字节字符串而不是Unicode对象,并且该字节字符串包含非ASCII字符。

    你有没有 _ Unicode码__ 你班的方法?

    我在python控制台上根据您的评论中的实际数据进行了尝试:

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

    它似乎起作用了。你能试着在你的控制台上打印这个吗?也许您的控制台编码有问题。

        2
  •  2
  •   Alex Martelli    15 年前

    根据您如何将这些“合适的符号”编码成字节字符串,您需要通过提及适当的编解码器(例如, thebytestr.decode('latin-1') 如果拉丁语-1是你编码它的方式!),在制作 utf-8 该Unicode字符串的编码。只是 unicode(something) 使用默认编码,即ASCII,因此完全不知道任何“适合的符号”!-)

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

        3
  •  0
  •   Henry Gotjen    9 年前

    我用同样的代码

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