【问题标题】:Unicode Characters in Twitter (Python)Twitter 中的 Unicode 字符 (Python)
【发布时间】:2015-11-05 05:32:40
【问题描述】:

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

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

【问题讨论】:

  • '1F430' 仍然是一系列五个字母数字字符,无论您是否将其标记为 unicode。你实际上想发送什么角色?
  • 你的意思可能是'\U0001F430' (????)?
  • 这只是一个例子,但“1F430”应该是兔子表情符号。那么如何让计算机将其作为一个字符读取呢?
  • @mata,是的!我应该如何将它传递给 Python,以便它以我想要的方式读取它?编辑:没关系,你的答案实际上回答了这个问题。非常感谢!
  • @codycrossley 你用python2还是python3?这些版本之间在 unicode 处理方面存在很多差异,并且有不同的possible escape sequences,可以根据 unicode 代码点所需的字节大小来使用...

标签: python twitter unicode emoji


【解决方案1】:
>>> 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()

使用哪种特定编码取决于来源,例如,请参阅A good way to get the charset/encoding of an HTTP response in Python

【讨论】:

    【解决方案2】:

    u'1F430' 是文字字符串“1F430”。你想得到什么角色?通常,您可以使用“\x20”将文字字节转换为 python 字符串,例如

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

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

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

    Unicode 代码点 20(单个空格)位于 2 个哈希值的中间

    请参阅https://docs.python.org/3.3/howto/unicode.html 了解更多信息。注意它可能会有点令人困惑,因为在很多情况下,python 会在字节和 unicode 之间隐式转换(使用 ASCII 编码),这可能会让你暂时隐藏这个问题。

    【讨论】:

    • 对于这个代码点,一个 4 字节的转义序列是不够的,您需要一个 8 字节的 (\Uxxxxxxxx)。此外,如果您使用 python2 语法,则不应链接到 python3 的文档,因为这可能会让读者感到困惑。
    • 不要将文本打印为字节。使用哪种编码来解码字节取决于上下文。
    猜你喜欢
    • 2016-07-10
    • 2017-11-19
    • 2011-11-12
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2021-04-06
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多