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

时间:2019-04-17 09:09:22

标签: python-2.7 unicode

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

例如字符串可以如下所示: (2)ببككويت 或像这样: (2)بسكويت

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

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

1 个答案:

答案 0 :(得分:0)

是的,但这可能很困难,并且完全取决于您使用的文字。

模块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开头的类别是 control / Formatting 。 但是根据使用情况,您可能还需要包含其他空格字符。 也许您还需要执行另一项“规范化”,将所有空间合并到一个U + 0020中。

很难一概而论(但是第一次标准化),因为每个unicode代码点都可能具有某种语义上的意义。 因此,您应该检查可以丢弃的东西以及必须维护的东西。