Twitter 中的 Unicode 字符 (Python)

Unicode Characters in Twitter (Python)

我已经学会了如何使用 Python 发送推文,但我想知道是否可以在推文中发送表情符号或其他特殊的 Unicode 字符。

例如,当我尝试发送 u'1F430' 时,它在推文中仅显示为“1F430”。

u'1F430' 是文字串“1F430”。你想得到什么性格?通常,您可以使用“\x20”将文字字节放入 python 字符串中,例如

>>> print(b"#\x20#")
# #

2个哈希之间十六进制值为20(十进制32)的字节。字节默认解码为ASCII,ASCII char (hex) 20是一个space.

>>> print(u"#\u0020#")
# #
>>> print(u"#\U0001F430#")
# #

2 个哈希中间的 Unicode 代码点 20(单个 space)

有关详细信息,请参阅 https://docs.python.org/3.3/howto/unicode.html。注意:在很多情况下,python 会在字节和 unicode 之间隐式转换(使用 ASCII 编码),这可能会让人有些困惑,这可以暂时隐藏问题。

>>> len(u'1f430')
5
>>> len(u'\U0001F430') 
1 # the latter might be equal to two in Python 2 on a narrow build (Windows, OS X)

前者为5个字符,后者为单个字符

如果您想在 Python 源代码中指定字符,那么您可以使用其名称以提高可读性:

>>> print(u"\N{RABBIT FACE}")

注意:它可能无法在 Windows 控制台中运行。要在此处 显示 非 BMP Unicode 字符,您可以使用 win-unicode-console + ConEmu.

如果您从文件、网络等读取它,那么这个字符与其他任何字符都没有区别:要将字节解码为 Unicode 文本,您应该指定字符编码,例如:

import io

with io.open('filename', encoding='utf-8') as file:
    text = file.read()

具体使用哪种编码取决于来源,例如,参见