如果我混合了阿拉伯字母和拉丁字母的字符串,结果可能会很奇怪。
例如字符串可以如下所示: (2)ببككويت 或像这样: (2)بسكويت
,唯一的区别是第二个字符中的从右到左标记(这是不可见的Unicode字符U + 200F)。 但是,如果只有一个从右到左的标记或有多个,则不会有任何区别。 也可能是正常的从右到左或从右到左嵌入(U + 200F或U + 202B)
当我比较两个字符串时,我只知道它们是否相等。 即使字符串不相同,也有可能知道可见结果是否相同吗?
答案 0 :(得分:0)
是的,但这可能很困难,并且完全取决于您使用的文字。
模块unicodedata
将为您提供数据。就个人而言,我将从规范化开始,例如NFKC
或NFC
,具体取决于您的输入。
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代码点都可能具有某种语义上的意义。 因此,您应该检查可以丢弃的东西以及必须维护的东西。