【问题标题】:Converting emojis to Unicode and vice versa in python 3在python 3中将表情符号转换为Unicode,反之亦然
【发布时间】:2018-05-22 19:25:15
【问题描述】:

我正在尝试在 python 3 中将表情符号转换为其 Unicode。例如,我将拥有表情符号 ????并由此想得到相应的 unicode 'U+1F600'。同样,我想将“U+1F600”转换回????。现在我已经阅读了文档并尝试了几个选项,但是 python 的行为在这里让我感到困惑。

>>> x = '????'
>>> y = x.encode('utf-8')
>>> y
b'\xf0\x9f\x98\x80'

表情符号被转换为字节对象。

>>> z = y.decode('utf-8')
>>> z
'????'

将字节对象转换回表情符号,到目前为止一切顺利。

现在,获取表情符号的 unicode:

>>> c = '\U0001F600'
>>> d = c.encode('utf-8')
>>> d
>>> b'\xf0\x9f\x98\x80'

这会再次打印出字节编码。

>>> d.decode('utf-8')
>>> '????'

这会再次打印表情符号。我真的不知道如何仅在 Unicode 和 emoji 之间进行转换。

【问题讨论】:

    标签: python unicode formatting emoji


    【解决方案1】:

    '?' 已经是一个 Unicode 对象。 UTF-8 不是 Unicode,它是 Unicode 的字节编码。要获取 Unicode 字符的代码点编号,可以使用 ord 函数。并以您想要的形式打印它,您可以将其格式化为十六进制。像这样:

    s = '?'
    print('U+{:X}'.format(ord(s)))
    

    输出

    U+1F600
    

    如果你有 Python 3.6+,你可以通过使用 f-string 使它更短(更高效):

    s = '?'
    print(f'U+{ord(s):X}')
    

    顺便说一句,如果您想创建像 '\U0001F600' 这样的 Unicode 转义序列,则可以使用 'unicode-escape' 编解码器。但是,它返回一个bytes 字符串,您可能希望将其转换回文本。您可以为此使用“UTF-8”编解码器,但也可以只使用“ASCII”编解码器,因为它保证只包含有效的 ASCII。

    s = '?'
    print(s.encode('unicode-escape'))
    print(s.encode('unicode-escape').decode('ASCII'))
    

    输出

    b'\\U0001f600'
    \U0001f600
    

    我建议你看看 Stack Overflow 联合创始人 Joel Spolsky The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) 的这篇短文。

    【讨论】:

      【解决方案2】:
      sentence = "Head-Up Displays (HUD)? for #automotive? sector\n \nThe #UK-based #startup? Envisics got €42 million #funding? from l… "
      print("normal sentence - ", sentence)
      
      uc_sentence = sentence.encode('unicode-escape')
      print("\n\nunicode represented sentence - ", uc_sentence)
      
      decoded_sentence = uc_sentence.decode('unicode-escape')
      print("\n\ndecoded sentence - ", decoded_sentence)
      

      输出

      normal sentence -  Head-Up Displays (HUD)? for #automotive? sector
       
      The #UK-based #startup? Envisics got €42 million #funding? from l… 
      
      
      unicode represented sentence -  b'Head-Up Displays (HUD)\\U0001f4bb for #automotive\\U0001f697 sector\\n \\nThe #UK-based #startup\\U0001f680 Envisics got \\u20ac42 million #funding\\U0001f4b0 from l\\u2026 '
      
      
      decoded sentence -  Head-Up Displays (HUD)? for #automotive? sector
       
      The #UK-based #startup? Envisics got €42 million #funding? from l… 
      

      【讨论】:

        猜你喜欢
        • 2014-09-21
        • 1970-01-01
        • 2010-10-16
        • 2014-07-22
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 2012-05-01
        • 2010-10-16
        相关资源
        最近更新 更多