python lower方法的局限性

日常工作中,往往有很多大写转小写的需求。
比如设计es索引的时候往往会把大小写相同的分词归在一个索引内,这样请求输入也会强制转成小写再去查询。
python2.7因为其对unicode的不友好,导致lower()这个方法有一定的局限性,尤其是处理特殊unicode字符的时候。看下面的例子

>>> "AEIOU".lower()
'aeiou'
>>> "ÆĘÏŒÚ".lower()
'\xc3\x86\xc4\x98\xc3\x8f\xc5\x92\xc3\x9a'
>>> print "ÆĘÏŒÚ".lower()
ÆĘÏŒÚ

似乎没有变成小写,这是因为lower方法本身只支持ascii码,对unicode不支持,但对unicode就好了。

>>> print u"ÆĘÏŒÚ".lower()
æęïœú

可以写成通用函数

def real_lower(input):
    if isinstance(input,str):
        input = input.decode('utf-8')
    input = input.lower().encode('utf-8')
    return input

猜你喜欢

转载自blog.csdn.net/weixin_41571449/article/details/80725966