繁体   English   中英

如何正确迭代 Python 中的 unicode 字符

[英]How to properly iterate over unicode characters in Python

我想遍历一个字符串并输出所有表情符号。

我正在尝试遍历字符,并根据表情符号列表检查它们。

但是,python 似乎将 unicode 字符拆分为较小的字符,从而破坏了我的代码。 例子:

>>> list(u'Test \U0001f60d')
[u'T', u'e', u's', u't', u' ', u'\ud83d', u'\ude0d']

有什么想法为什么 u'\\U0001f60d' 会分裂?

或者有什么更好的方法来提取所有表情符号? 这是我的原始提取代码:

def get_emojis(text):
  emojis = []
  for character in text:
    if character in EMOJI_SET:
      emojis.append(character)
  return emojis

Python 3.3 之前的版本在内部使用 UTF-16LE(窄构建)或 UTF-32LE(宽构建)来存储 Unicode,并且由于抽象的泄漏,将此细节公开给用户。 UTF-16LE 使用代理对将 U+FFFF 以上的 Unicode 字符表示为两个代码点。 使用广泛的 Python 构建或切换到 Python 3.3 或更高版本来解决问题。

处理窄构建的一种方法是匹配代理对:

Python 2.7(窄构建):

>>> s = u'Test \U0001f60d'
>>> len(s)
7
>>> re.findall(u'(?:[\ud800-\udbff][\udc00-\udfff])|.',s)
[u'T', u'e', u's', u't', u' ', u'\U0001f60d']

蟒蛇 3.6:

>>> s = 'Test \U0001f60d'
>>> len(s)
6
>>> list(s)
['T', 'e', 's', 't', ' ', '😍']

尝试这个,

import re
re.findall(r'[^\w\s,]', my_list[0])

正则表达式r'[^\\w\\s,]'匹配任何不是单词、空格或逗号的字符。

我一直在与 Unicode 斗争,但这并不像看起来那么容易。 有一个包含所有警告的emoji库(我不隶属于)。

如果要列出字符串中出现的所有表情符号,我建议使用emoji.emoji_lis

只需查看emoji.emoji_lis的来源即可了解它实际上有多复杂。

例子

>>> emoji.emoji_lis('🥇🥈🇧🇹')
>>> [{'location': 0, 'emoji': '🥇'}, {'location': 1, 'emoji': '🥈'}, {'location': 2, 'emoji': '🇧🇹'}]

列表示例(并不总是有效)

>>> list('🥇🥈🇧🇹')
>>> ['🥇', '🥈', '🇧', '🇹']

问题如上所述。 解决问题的可能措施

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM