Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3中使用Unicode多字节字符的子字符串选择_Python_Python 3.x_Unicode_Emoji - Fatal编程技术网

Python 3中使用Unicode多字节字符的子字符串选择

Python 3中使用Unicode多字节字符的子字符串选择,python,python-3.x,unicode,emoji,Python,Python 3.x,Unicode,Emoji,我对Python3如何处理unicode多字节字符有点困惑。下面是一个表情符号示例: [1]中的:打印('☺️') ☺️ 在[2]中:打印(len('☺️')) 2. 在[3]中:打印('☺️'[0]) ☺ 在[4]中:打印('☺️'[1]) ️ [5]:print(len('问题是两个字符串('☺️' 而且☺️ 使用UTF-16方案由两个字节表示。@Marounnaroun当然可以,但它仍然是一个单字符,对吗?UTF-(8 | 16)支持多字节字符。@Marounnaroun,UTF-16中有

我对Python3如何处理unicode多字节字符有点困惑。下面是一个表情符号示例:

[1]中的
:打印('☺️')
☺️
在[2]中:打印(len('☺️'))
2.
在[3]中:打印('☺️'[0])
☺
在[4]中:打印('☺️'[1])
️

[5]:print(len('问题是两个字符串('☺️' 而且☺️ 使用UTF-16方案由两个字节表示。@Marounnaroun当然可以,但它仍然是一个单字符,对吗?UTF-(8 | 16)支持多字节字符。@Marounnaroun,UTF-16中有四个字节。“Unicode多字节”是一个误称,@Maroun UTF-16与此无关。Unicode单位是代码点(不包含存储或编码)并且可以使用多个代码点来描述单个字符。用于描述一个字符的一系列代码点是一个grapheme集群。将Unicode字符串中的代码点想象成数字是Python列表:
[1,2500000000]
。每个数字有多少字节?回答:不在乎。在乎时,是指将数字或Unicode字符串写入终端、文件或网络套接字。对于Unicode字符串,则
.encode()
将它们转换为字节,指定适当的编码将代码点转换为一个或多个字节。这很有趣,因此Python 3确实从unicode的角度正确处理表情符号;表情符号实际上是一个多字符符号?似乎我必须创建一个字符串类的子类来查找表情符号边缘案例…?字符,尤其是表情符号,可以由任意数量的代码点组成。这类组的技术术语是一个字形集群。我认为关于如何在这些字形集群上迭代有一些问题。
regex
第三方模块有
\X
来匹配字形集群。@JimmyC一个表情符号really是一个多字符符号?在您的第一个示例中是,但不需要。我猜您复制表情符号时,'\ufe0f'代码点包含在表情符号中。@Leon我没有复制表情符号,我使用了macOS上可用的表情符号键盘。如果没有包含\ufe0f代码点,☺️ 变成☺.