1晾虑、讀取txt文件時(shí)報(bào)錯(cuò):UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 28
錯(cuò)誤代碼:
file=codecs.open(u"大話西游.txt",'r')
content=file.read()
報(bào)錯(cuò)信息:
Traceback (most recent call last):
File "E:/code/yunCode/venv/main.py", line 10, in <module>
content=file.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 28: illegal multibyte sequence
解決辦法:
1、讀取設(shè)置為二進(jìn)制讀取
file=codecs.open(u"大話西游.txt",'rb')
content=file.read()
2、讀取設(shè)置編碼為utf-8
file=codecs.open(u"大話西游.txt",'r','utf-8')
content=file.read()
錯(cuò)誤原因:
在txt中存儲(chǔ)中文時(shí)是用的unicode進(jìn)行編碼贼穆,再用utf-8編碼進(jìn)行存儲(chǔ)的。而現(xiàn)在執(zhí)行f.read()的時(shí)候不见,沒有指定編碼的情況下蚀乔,f.read()文件中有中文了之后就使用了默認(rèn)的gbk解碼,但是因?yàn)槲募旧硎莡tf8的召边,所以解碼失敗铺呵。
名詞解釋
1、 gbk編碼
最早用來編碼中文的編碼隧熙,可以表示6000多個(gè)中文字符片挂。
2、 unicode標(biāo)準(zhǔn)(編碼)
由于中文實(shí)在太多了贞盯,gbk編碼不能滿足所有需求音念,而后各個(gè)國(guó)家包括中國(guó)都做個(gè)各種各樣的擴(kuò)充,導(dǎo)致出現(xiàn)多種編碼躏敢,編碼混亂闷愤。為了統(tǒng)一標(biāo)準(zhǔn)iso組織發(fā)明了unicode,可以用來表示世界上所有的字符。
3件余、utf8編碼
一開始的unicode即是字符集的標(biāo)準(zhǔn)讥脐,也是傳輸?shù)木幋a遭居,但是后來由于unicode占用三個(gè)字節(jié),解析很容易出錯(cuò)旬渠,iso組織為了解決這種情形俱萍,發(fā)明了utf8編碼來存儲(chǔ)unicode標(biāo)準(zhǔn)的字符。