背景
现有人员的姓名,希望通过字符串分割,分别获取人员的姓和名。(默认都是单姓,即取第一个字就是姓,剩下的为名)。
由于python2存在中文字符编码问题,并非默认都是utf-8,所以在进行字符串截取时就可能存在问题。
1 | name = '郑小凯' |
发现就出现乱码了。
排查
不通过print输出的话:
1 | name |
可见由于python2中中文的编码为gbk,两个字符才是一个汉字,所以导致了乱码。
那么我们将字符转换成Unicode类型,即utf-8编码后再尝试一下:
1 | name1 = name.decode('utf-8') |
这样就得到我们想要的结果。
结论
在utf-8编码中,每个汉字都是一个值,所以可以直接使用字符串分割来操作。而其他编码则存在多个字符合并起来才是一个汉字,导致字符串分割出现乱码问题。
故在python2中,对中文汉字进行字符串分割需要先通过decode
转换成utf-8
类型之后再操作,后续如有需要可以再通过encode
转换回所需要的编码类型。
现在基本上在http请求中传递的均为utf-8类型,可以直接使用字符串分割处理。
当然后续可以的话还是建议使用python3,彻底摆脱中文字符串编码的问题。