问题
如何比较两个字面一样,但字节不一样的字符串
例如:
>>> a = u'\u4eba\u53e3\u3058\u3093\u3053\u3046\u306b\u81be\u7099\u304b\u3044\u3057\u3083\u3059\u308b'
>>> b = u'\u4eba\u53e3\u3058\u3093\u3053\u3046\u306b\u81be\uf9fb\u304b\u3044\u3057\u3083\u3059\u308b'
>>> print(a, b, sep='\n')
人口じんこうに膾炙かいしゃする
人口じんこうに膾炙かいしゃする
这里的a和b字符串是一样的,但仔细观察可以发现,其中a字符串是\u7099
,b字符串对应的是\uf9fb
所以虽然a和b是字面上一模一样的字符串,但a实际上和b是不等的
>>> a == b
False
解决方案
使用unicodedata
库的normalize
将两个字符串标准化后,再进行比较就可以了
>>> import unicodedata
>>> normalize_a = unicodedata.normalize('NFC', a)
>>> normalize_b = unicodedata.normalize('NFC', b)
>>> print(normalize_a)
人口じんこうに膾炙かいしゃする
>>> print(normalize_b)
人口じんこうに膾炙かいしゃする
>>> print(normalize_a == normalize_b)
True
讨论
这个问题是最近在Stack Overflow上很热的一个问题,原问题见:https://stackoverflow.com/que...
关于Unicode对这个问题的介绍可以见:http://www.unicode.org/faq/no...
来源
Stack Overflow
关注
欢迎关注我的微信公众号:python每日一练
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。