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