Python UnicodeEncodeError: 'gbk' codec can't encode character 解決方法
使用Python寫文件的時(shí)候,或者將網(wǎng)絡(luò)數(shù)據(jù)流寫入到本地文件的時(shí)候,大部分情況下會(huì)遇到:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 這個(gè)問(wèn)題。 網(wǎng)絡(luò)上有很多類似的文件講述如何解決這個(gè)問(wèn)題,但是無(wú)非就是encode,decode相關(guān)的,這是導(dǎo)致該問(wèn)題出現(xiàn)的真正原因嗎?不是的。 很多時(shí)候,我們使用了decode和encode,試遍了各種編碼,utf8,utf-8,gbk,gb2312等等,該有的編碼都試遍了,可是編譯的時(shí)候仍然出現(xiàn): UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position XXX。 崩潰了。
在windows下面編寫python腳本,編碼問(wèn)題很嚴(yán)重。
將網(wǎng)絡(luò)數(shù)據(jù)流寫入文件時(shí)時(shí),我們會(huì)遇到幾個(gè)編碼:
1: #encoding='XXX' 這里(也就是python文件第一行的內(nèi)容)的編碼是指該python腳本文件本身的編碼,無(wú)關(guān)緊要。只要XXX和文件本身的編碼相同就行了。 比如notepad++ "格式"菜單里面里可以設(shè)置各種編碼,這時(shí)需要保證該菜單里設(shè)置的編碼和encoding XXX相同就行了,不同的話會(huì)報(bào)錯(cuò)
2:網(wǎng)絡(luò)數(shù)據(jù)流的編碼 比如獲取網(wǎng)頁(yè),那么網(wǎng)絡(luò)數(shù)據(jù)流的編碼就是網(wǎng)頁(yè)的編碼。需要使用decode解碼成unicode編碼。
3:目標(biāo)文件的編碼 要將網(wǎng)絡(luò)數(shù)據(jù)流的編碼寫入到新文件,那么我么需要指定新文件的編碼。寫文件代碼如:
f.write(txt)
,那么txt是一個(gè)字符串,它是通過(guò)decode解碼過(guò)的字符串。關(guān)鍵點(diǎn)就要來(lái)了:目標(biāo)文件的編碼是導(dǎo)致標(biāo)題所指問(wèn)題的罪魁禍?zhǔn)?。如果我們打開(kāi)一個(gè)文件:
f = open("out.html","w")
,在windows下面,新文件的默認(rèn)編碼是gbk,這樣的話,python解釋器會(huì)用gbk編碼去解析我們的網(wǎng)絡(luò)數(shù)據(jù)流txt,然而txt此時(shí)已經(jīng)是decode過(guò)的unicode編碼,這樣的話就會(huì)導(dǎo)致解析不了,出現(xiàn)上述問(wèn)題。 解決的辦法就是,改變目標(biāo)文件的編碼:
f = open("out.html","w",encoding='utf-8')
。這樣,問(wèn)題將不復(fù)存在。
- 解決python多線程報(bào)錯(cuò):AttributeError: Can''t pickle local object問(wèn)題
- python誤差棒圖errorbar()函數(shù)實(shí)例解析
- python使用pip安裝模塊出現(xiàn)ReadTimeoutError: HTTPSConnectionPool的解決方法
- Python BeautifulSoup [解決方法] TypeError: list indices must be integers or slices, not str
- python中報(bào)錯(cuò)"json.decoder.JSONDecodeError: Expecting value:"的解決
- Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤的解決方法
- 解決python報(bào)錯(cuò)MemoryError的問(wèn)題
- Python發(fā)起請(qǐng)求提示UnicodeEncodeError錯(cuò)誤代碼解決方法
相關(guān)文章
python3+django2開(kāi)發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過(guò)程詳解
這篇文章主要介紹了python3+django2開(kāi)發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07基于Python實(shí)現(xiàn)B站視頻數(shù)據(jù)信息內(nèi)容采集
這篇文章主要介紹了如何基于Python實(shí)現(xiàn)B站視頻數(shù)據(jù)信息內(nèi)容采集,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2024-02-02在django中使用post方法時(shí),需要增加csrftoken的例子
這篇文章主要介紹了在django中使用post方法時(shí),需要增加csrftoken的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python2和Python3中print的用法示例總結(jié)
在Python 3中接觸的第一個(gè)很大的差異就是縮進(jìn)是作為語(yǔ)法的一部分,這和C++等其他語(yǔ)言確實(shí)很不一樣,所以要小心,其中python3和python2中print的用法有很多不同,這篇文章主要給大家介紹了關(guān)于Python2和Python3中print用法的相關(guān)資料,需要的朋友可以參考下。2017-10-10django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例
今天小編就為大家分享一篇django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python selenium自動(dòng)上傳有贊單號(hào)的操作方法
這篇文章主要介紹了python selenium自動(dòng)上傳有贊單號(hào)的操作代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07python將字母轉(zhuǎn)化為數(shù)字實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于python如何將字母轉(zhuǎn)化為數(shù)字的相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-10-10