Python:是否可以通过可见的结果来比较 unicode 字符串



如果我混合了阿拉伯语和拉丁字母的字符串,结果可能会很奇怪。

例如,字符串可以看起来像这样:(2)‏بسك‏ويت或者像这样:(2(بسكويت

唯一的区别是第二个中从右到左的标记(这是一个不可见的 unicode 字符 U+200F(。但是,如果只有一个从右到左的标记或有多个标记,则不会有任何区别。也可能有正常的从右到左或嵌入的从右到左(U+200F 或 U+202B(

当我比较两个字符串时,我只知道它们是否相等。是否也有可能知道即使字符串不同,可见结果是否相同?

是的,但这可能很困难,这完全取决于您拥有什么文本。

模块unicodedata将为您提供数据。就个人而言,我会从规范化开始,例如 NFKCNFC ,具体取决于您的输入。

 s = unicodedata.normalize(form, s)

然后我会过滤我们不需要的字符。

 s = [c for c in s if not unicodedata.category(c).startswith('C')]

您将在 http://www.unicode.org/reports/tr44/tr44-6.html#Property_Values 中找到可能的常规类别。以 C 开头的类别是控件/格式设置。但您可能还需要包含其他空格字符,具体取决于用例。也许您还需要进行其他"规范化",将所有空格合并为一个 U+0020。

概括起来

非常困难(但第一次规范化(,因为每个 unicode 代码点都可能具有一定的语义意义。因此,您应该检查可以丢弃的内容以及必须维护的内容。

最新更新