关于python编码的问题
首先要說明的是在python內(nèi)部的編碼為Unicode,在使用encode()與decode()兩個(gè)方法時(shí),都是將Unicode作為中間橋梁的。eg:
string.decode('utf-8') 表示將編碼為‘utf-8’的字符串編碼為Unicode。
string.encode('gb2312') 表示將Unicode編碼為gb2312。
另外,常見的字符編碼有ascii、Unicode、utf-8以及針對中文編碼的gb2312。
1、ascii是一種針對英文、數(shù)字字符編碼的方式,一共有127字符,采用一個(gè)字節(jié)來編碼,比如:A采用ascii編碼為十進(jìn)制65。
2、Unicode是一種將中文以及所有語言編碼進(jìn)去的格式,Unicode一般采用兩個(gè)字節(jié)來編碼(有些生僻字符需要4個(gè)字節(jié))。
3、utf-8是本著節(jié)約的精神出現(xiàn)的一種編碼方式,因?yàn)槿绻捎肬nicode進(jìn)行編碼,對于像英文字母的這種字符只需要一個(gè)字節(jié)就夠了,那么用Unicode編碼顯然是有一些浪費(fèi)的,由此utf-8出現(xiàn)了。它將Unicode編碼轉(zhuǎn)化為“可變長編碼”,可以將一個(gè)Unicode字符編碼為1-6個(gè)字節(jié),英文1個(gè)字節(jié),漢字通常3個(gè)字節(jié),一些生僻的字符4-6個(gè)字節(jié)。
4、gb2312編碼采用兩個(gè)字節(jié)來編碼一個(gè)漢字。
(補(bǔ)充一些基本知識:因?yàn)橛?jì)算機(jī)只認(rèn)識01數(shù)字,而計(jì)算機(jī)被設(shè)計(jì)為1個(gè)字節(jié)(byte)有8個(gè)比特(bit),因此,如果用一個(gè)字節(jié)來表示字符的話,最大只能表示到255,對于我們博大精深的漢字來說是遠(yuǎn)遠(yuǎn)不夠的。因此在gb2312編碼中采用兩個(gè)字節(jié)來編碼一個(gè)漢字。其中兩個(gè)字節(jié)可以表示到65535)
接下來是一些在調(diào)試python程序時(shí)遇到的一些編碼問題:
eg:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 遇到這個(gè)問題時(shí),是在將網(wǎng)絡(luò)數(shù)據(jù)流寫進(jìn)本地文件時(shí)出現(xiàn)的。
因?yàn)樵趙indows下,新文件的默認(rèn)編碼為gbk,這樣的話,python解釋器或用gbk編碼去解析我們的網(wǎng)絡(luò)數(shù)據(jù)流,而我們的網(wǎng)絡(luò)數(shù)據(jù)流并不一定是gbk編碼的,所以解決辦法是,改變目標(biāo)文件的編碼:
fp=open('xxxx.html','w', encoding='utf-8')
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的关于python编码的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SOFAMosn 无损重启/升级
- 下一篇: App上架/更新怕被拒? iOS过审“避