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