2024-04-29 16:10:51 发布
网友
我想检查一个字符串是否已经是NFC形式。目前我有:
unicodedata.normalize('NFC', s) == s
我这样做是为了大量的字符串,所以我想有效率。上述方法似乎是浪费。它转换为NFC,然后进行字符串比较。在
有没有更有效的方法?我考虑过:
这样可以避免字符串比较。但我不确定这是否总是正确的。如果NFC规范化始终更改非NFC字符串的长度,则此方法有效。这是一个有效的假设吗?在
还有别的主意吗?在
正常化不一定会改变字符串的长度。例如,'Ω'(U+2126)在NFC之后变成{}(U+03A9)。在
'Ω'
Unicode数据库中有一个规范化"quick check" property,用于测试字符是否已经被规范化,但不幸的是,Python的unicodedata模块没有公开它。但是,unicodedata.normalize()确实使用这个属性来避免做任何额外的工作,如果字符串已经规范化,它只返回输入字符串。在
unicodedata
unicodedata.normalize()
要访问这个属性,您需要自己从Unicode字符数据库编译一个表,或者使用一个更广泛的Unicode库和Python绑定(比如PyICU)。在
正常化不一定会改变字符串的长度。例如,}(U+03A9)。在
'Ω'
(U+2126)在NFC之后变成{Unicode数据库中有一个规范化"quick check" property,用于测试字符是否已经被规范化,但不幸的是,Python的
unicodedata
模块没有公开它。但是,unicodedata.normalize()
确实使用这个属性来避免做任何额外的工作,如果字符串已经规范化,它只返回输入字符串。在要访问这个属性,您需要自己从Unicode字符数据库编译一个表,或者使用一个更广泛的Unicode库和Python绑定(比如PyICU)。在
相关问题 更多 >
编程相关推荐