在Python中检查unicode字符串是否为NFC的有效方法?

2024-04-29 16:10:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查一个字符串是否已经是NFC形式。目前我有:

unicodedata.normalize('NFC', s) == s

我这样做是为了大量的字符串,所以我想有效率。上述方法似乎是浪费。它转换为NFC,然后进行字符串比较。在

有没有更有效的方法?我考虑过:

^{pr2}$

这样可以避免字符串比较。但我不确定这是否总是正确的。如果NFC规范化始终更改非NFC字符串的长度,则此方法有效。这是一个有效的假设吗?在

还有别的主意吗?在


Tags: 方法字符串浪费规范化nfc形式主意normalize
1条回答
网友
1楼 · 发布于 2024-04-29 16:10:51

正常化不一定会改变字符串的长度。例如,'Ω'(U+2126)在NFC之后变成{}(U+03A9)。在

Unicode数据库中有一个规范化"quick check" property,用于测试字符是否已经被规范化,但不幸的是,Python的unicodedata模块没有公开它。但是,unicodedata.normalize()确实使用这个属性来避免做任何额外的工作,如果字符串已经规范化,它只返回输入字符串。在

要访问这个属性,您需要自己从Unicode字符数据库编译一个表,或者使用一个更广泛的Unicode库和Python绑定(比如PyICU)。在

相关问题 更多 >