在python2.7下字符編碼的問(wèn)題
#--*-- coding:utf-8 --*--
s="你好" ##2.7就看第一行寫(xiě)啥
s_to_unicode=s.decode("gbk")
print s_to_unicode
結(jié)果為:浣犲ソ 其實(shí)這句話s_to_unicode=s.decode("gbk"),就相當(dāng)于你非要用記事本打開(kāi)word一樣,沒(méi)什么意義
s還是utf-8的編碼格式,但你非要使用gbk的轉(zhuǎn)碼包,gbk的字節(jié)范圍時(shí)包含utf-8的,但打開(kāi)的是亂碼而已,畢竟對(duì)應(yīng)關(guān)系不一樣
1 s="你好"
2 s_to_unicode=s.decode("gbk")
3 print s_to_unicode
如果沒(méi)有第一行就會(huì)報(bào)錯(cuò)了,此時(shí)s將使用默認(rèn)的ascii來(lái)存儲(chǔ),但ascii的字節(jié)范圍是1個(gè)字節(jié),無(wú)法保存的,就會(huì)報(bào)錯(cuò)了
http://www.cnblogs.com/work115/p/5924446.html
在python2中進(jìn)行編碼和解碼的時(shí)候,不指定編碼方式,那么python就會(huì)使用defaultencoding
1 #--*--coding:utf-8--
2 s="你好"
3 #: s是一個(gè)utf-8格式的字符串
4 u=s.decode("utf-8")
5 #: s被解碼為unicode對(duì)象,賦給u
6 sg=u.encode("gbk")
7 #: u被編碼為gbk格式的字符串,賦給sg
8 print sg
1 #--*--coding:utf-8--*--
2 s="你好"
3 ss=s.encode("gbk")
4 print ss
上面的代碼會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息:'ascii' codec can't decode byte......
因?yàn)闆](méi)有指定defaultencoding,所以其實(shí)在做這樣的事情:s.decode('ascii').encode('gbk')
(ascii解碼包是無(wú)法解碼utf-8的)
設(shè)置defaultencoding代碼如下:
1 reload(sys)
2 sys.setdefaultencoding('utf-8')
當(dāng)然這些主要是在python2.x下的問(wèn)題,沒(méi)有特殊需求就用python3吧
python3默認(rèn)的字符編碼為unicode