问题背景:
使用python2.7版本,python脚本的编码为GBK,
#coding:gbk
s = '嘚'
print(s.lower())
复现流程:
先vi打开一个新建文件,在其中插入"嘚"字
然后执行:%!xxd,可以直接在vi中看到这个字的二进制编码为874e
将874e编辑为876e
然后执行%!xxd -r
这个时候就可以看到"噉"字出现了,因为"噉"的编码就是876e
以上现象解释如下:
python的lower()函数会扫描字符串中的大写字母,并将其转为小写字母,而4e的编码正好是大写字母"N",6e为小写字母"n"
因此如果有一个输入文件为"别嘚瑟“(其gbk编码为b1f0 874e c9aa),那么经过python的lower()函数后,就会变为gbk编码"b1f0 876e c9aa",也即"别噉瑟"