python 2.7 处理中文字符串时,经常会碰到乱码问题。最近在用python 2.7分割中文字符串,分割后的结果都是乱码。苦恼很久,终于找到原因。先看代码:
import os
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
str="我是小天才"
print(type(str))
strarr=[]
for i in str:
print[i]
strarr.append(i)
print("======================================")
print(strarr)
结果如下:
<type 'str'>
['\xe6']
['\x88']
['\x91']
['\xe6']
['\x98']
['\xaf']
['\xe5']
['\xb0']
['\x8f']
['\xe5']
['\xa4']
['\xa9']
['\xe6']
['\x89']
['\x8d']
======================================
['\xe6', '\x88', '\x91', '\xe6', '\x98', '\xaf', '\xe5', '\xb0', '\x8f', '\xe5', '\xa4', '\xa9', '\xe6', '\x89', '\x8d']
之所以会这样是因为在utf8编码形式为二进制,一个字由3个编码构成,python分割额时候,是按这个编码分割的。为了理解这个,请看下面代码:
print(str[:3])
==>我
这里可以看出,当按照编码规则,一次取3个编码的时候,打印中文就正常了。
但我们写代码的时候,如果碰到要分割中文字符串的时候,就每3个分割,这样显然反人类。
解决办法,将中文转unicode,在分割:
str="我是小天才"
str=unicode(str)
print(type(str))
print(str[:3])
strarr=[]
for i in str:
print [i]
strarr.append(i)
print("======================================")
print(strarr)
print(strarr[0])
结果如下:
<type 'unicode'>
我是小
[u'\u6211']
[u'\u662f']
[u'\u5c0f']
[u'\u5929']
[u'\u624d']
======================================
[u'\u6211', u'\u662f', u'\u5c0f', u'\u5929', u'\u624d']
我
我们可以看到,在unicode编码的情况下,每个中文对应一个编码,在按照编码分割的时候,分割出的结果就不会有错了。我们再进行打印,就可以显示中文了(前提:头部设置# -- coding: utf-8 --)。
总结:
在分割中文字符转时:先将str转unicode,再进行分割。