用python检测unicode专用区域字符
在Python3中识别unicode专用字符的正确方法是什么?模块用python检测unicode专用区域字符,python,python-3.x,unicode,Python,Python 3.x,Unicode,在Python3中识别unicode专用字符的正确方法是什么?模块unicodedata中没有明显的相关性,这使得查找字符名和属性变得很容易 一些背景:unicodedata.name(),它给出了unicode字符的名称,如果使用私用字符调用,将引发ValueError(例如,tryunicodedata.name(“\uf026”))。但空格字符(空格本身除外)和其他可能的东西也会触发异常。那么,检测PUA字符的非黑客可靠方法是什么呢?私用字符都在Co中,由unicodedata中的cate
unicodedata
中没有明显的相关性,这使得查找字符名和属性变得很容易
一些背景:
unicodedata.name()
,它给出了unicode字符的名称,如果使用私用字符调用,将引发ValueError
(例如,tryunicodedata.name(“\uf026”)
)。但空格字符(空格本身除外)和其他可能的东西也会触发异常。那么,检测PUA字符的非黑客可靠方法是什么呢?私用字符都在Co
中,由unicodedata
中的category()
返回:
>>> import unicodedata
>>> def is_pua(c):
... return unicodedata.category(c) == 'Co'
...
>>> is_pua(u'\uF026')
True
考虑到Unicode标准,即专用字符集永远不会更改(不会添加或删除任何字符),硬编码也很安全:
至U+E000
U+F8FF
至U+F0000
U+FFFFD
至U+100000
U+10FFFD
category()
,这可能更干净一些。嗯,我已经尝试了category()
,但是两个字母代码(Co
对于我尝试的代码点)的含义似乎没有在unicodedata
中记录。是否只有PUA字符具有类别Co
?这确实是一个很好的解决方案。我自己发现了:谷歌搜索没有任何帮助,但python有一个指向数据表的指针。类别Co
似乎仅适用于PUA代码点。(欢迎您在回答中包含这一点)。