日常工作中,往往有很多大写转小写的需求。
比如设计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