簡體   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