Vin*_*una 2 python unicode python-unicode
我想遍历一个字符串并输出所有表情符号。
我正在尝试遍历字符,并根据表情符号列表检查它们。
但是,python 似乎将 unicode 字符拆分为较小的字符,从而破坏了我的代码。例子:
>>> list(u'Test \U0001f60d')
[u'T', u'e', u's', u't', u' ', u'\ud83d', u'\ude0d']
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么 u'\U0001f60d' 会分裂?
或者有什么更好的方法来提取所有表情符号?这是我的原始提取代码:
def get_emojis(text):
emojis = []
for character in text:
if character in EMOJI_SET:
emojis.append(character)
return emojis
Run Code Online (Sandbox Code Playgroud)
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']
Run Code Online (Sandbox Code Playgroud)
蟒蛇 3.6:
>>> s = 'Test \U0001f60d'
>>> len(s)
6
>>> list(s)
['T', 'e', 's', 't', ' ', '']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |