【问题标题】:Detecting unicode private use area characters with python用python检测unicode私人使用区域字符
【发布时间】:2015-12-08 23:59:43
【问题描述】:

在 python 3 中识别 unicode 私有字符的正确方法是什么? unicodedata 模块中没有任何明显相关的内容,这使得查找角色名称和属性变得容易。

一些背景:unicodedata.name(),它给出了 unicode 字符的名称,如果使用私有字符调用(例如,尝试 unicodedata.name("\uf026")),将引发 ValueError。但是空白字符(除了空格本身)以及其他可能的东西也会触发异常。那么检测 PUA 字符的非hacky、可靠的方法是什么?

【问题讨论】:

    标签: python python-3.x unicode


    【解决方案1】:

    私人使用字符都在Cogeneral category中,由category()unicodedata中返回:

    >>> import unicodedata
    >>> def is_pua(c):
    ...   return unicodedata.category(c) == 'Co'
    ...
    >>> is_pua(u'\uF026')
    True
    

    鉴于 Unicode 标准 guarantees 规定私有字符集永远不会改变(永远不会添加或删除任何字符),硬编码 three ranges 也是安全的:

    • U+E000U+F8FF
    • U+F0000U+FFFFD
    • U+100000U+10FFFD

    【讨论】:

    • 有道理。但是真的没有库方法已经完成了这个简单的计算吗? (例如,以字符类的形式)
    • 我忘了他们也在同一个category(),应该是干净一点吧。
    • 嗯,我已经尝试过category(),但是unicodedata 中似乎没有记录两个字母代码的含义(我尝试过的代码点为Co)。是否只有 PUA 字符具有类别Co?这确实是一个很好的解决方案。
    • 自己找到的:谷歌搜索没有帮助,但是 python 的 unicode howto 有一个指向 General Category Values 的表的指针。类别 Co 似乎仅适用于 PUA 代码点。 (欢迎您在回答中包含此内容)。
    猜你喜欢
    • 2020-10-01
    • 2018-05-04
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2017-06-01
    • 2011-09-03
    • 2013-12-09
    相关资源
    最近更新 更多