【发布时间】:2017-06-07 02:08:33
【问题描述】:
我对 Python 3 如何处理 unicode 多字节字符有点困惑。这是一个带有表情符号的示例:
In [1]: print('☺️')
☺️
In [2]: print(len('☺️'))
2
In [3]: print('☺️'[0])
☺
In [4]: print('☺️'[1])
️
In [5]: print(len('????????????'))
4
由于我正在从事一个处理表情符号的小型爱好项目,这给我带来了一些问题,因为我更愿意将表情符号作为单个字符串处理,而不是像 Python 3 那样将它们视为多字符串。为什么 Python 3 不能将其识别为单个字符,我该如何以我喜欢的方式处理和使用表情符号?
如果这是我的终端或 REPL 的问题,我正在使用带有 iPython 5.1.0 的 macOS Sierra 终端。
【问题讨论】:
-
☺️ 使用 UTF-16 方案由 两个 字节表示。
-
@MarounMaroun 当然,但它仍然是单个字符,对吗? UTF-(8|16) 支持多字节字符。
-
@MarounMaroun 这是 UTF-16 中的四个字节。
-
"Unicode multibyte" 用词不当,@Maroun UTF-16 与此无关。 Unicode 单元是代码点(不隐含存储或编码),并且可以使用多个单元来描述单个字符。用于描述一个字符的一系列代码点是一个字素簇。
-
将 Unicode 字符串中的代码点想象成 Python 列表中的数字:
[1,2,5000000000]。每个数字有多少字节?答:不在乎。当您真正关心时,就是将数字或 Unicode 字符串写入终端、文件或网络套接字。对于 Unicode 字符串,您将.encode()它们转换为字节,指定适当的编码以将代码点转换为一个或多个字节。
标签: python python-3.x unicode emoji