Python每日一练0015

问题

如何比较两个字面一样,但字节不一样的字符串

例如:

>>> 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每日一练

《Python每日一练0015》

    原文作者:python每日一练
    原文地址: https://segmentfault.com/a/1190000014294765
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞