在 python 3 中将表情符号转换为 Unicode,反之亦然
Converting emojis to Unicode and vice versa in python 3
我正在尝试将表情符号转换成它在 python 中的 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 和表情符号之间单独转换。
'' 已经是一个 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'
编解码器。但是,它 returns 是一个 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!)。
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…
我正在尝试将表情符号转换成它在 python 中的 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 和表情符号之间单独转换。
'' 已经是一个 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'
编解码器。但是,它 returns 是一个 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!)。
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…