python中 截取中文 字符串乱码

python对于string的截取是 str[start,end]
但是中文字符却显示乱码,让人莫名奇妙的。这个坑琢磨了半天,解决办法是改为unicode格式。
unicode格式与str格式的转换关系参考
 
 

一 string类型的字符串拼接

先查看英文,可以看到他们截取是正确的。
 
 
inter='hello world'
repr(inter)
list(inter)
inter[2:4]
 
 
当存在中文字符时,却不能正确解析了,
 
zw='静夜思abc d'
repr(zw)
list(zw)
zw[2:5]#截取字符串
zw[1:4]
 
 
查看一下控制台的编码格式,可以看到是utf-8编码。当然,str还可以用其他编码。
import charade
det=charade.detect(zw)
print det
{'confidence': 0.87625, 'encoding': 'utf-8'}
页面是用utf-8编码的。
 
解决方法,使用unicode进行编码。下面看看他们之间的区别

二 unicode类型的字符串拼接

当为英文时,区别不大
 
 
en=u'hello'
repr(en)
list(en)
en[2:3]
 
中文夹杂英文时,能查看出,list是按字拆分的
 
 
zw=u'静夜思ab d'
repr(zw)
list(zw)
zw[2:3]
 
由此可以看出转换为unicode进行截取正确,但在跟其他字符进行拼接时,需要注意字符串类型问题,str+unicode会报错~
原文地址:https://www.cnblogs.com/q2z2012/p/7891254.html