python2中的編碼問題

最近爬js渲染網(wǎng)頁,提取json格式內(nèi)容的時候。忽然發(fā)現(xiàn)寫入本地時內(nèi)容全是帶‘u'的字符串碼,print輸出依然是帶u的串碼,encode(“utf-8”),則會報UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)錯誤

網(wǎng)上看相關(guān)的blog,發(fā)下大家都是

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

這樣強制將系統(tǒng)默認編碼格式轉(zhuǎn)換成utf-8確實能解決print的問題。

但是,寫入文件還是不行。

再有,在百度知道上看到有人修改python安裝目錄下lib文件夾下的site.py,我覺得這樣更加得不償失。

于是瘋狂在網(wǎng)上搜索找答案,終于在stackoverflow上看到相似的問題?;卮鹫哒f,出現(xiàn)這個問題的主要原因是python解釋器默認是asiic編碼,如果要在print上輸出,則需解碼成unicode。還建議提問者去看howto unicode官方文檔。

于是我上車看howto unicode。


文檔是這樣說的:

原來,解釋器默認編碼都是asiic,如果使用print輸出特殊編碼的字符,則需要先將編碼解碼成unicode,這樣解釋器print的時候會自動將編碼轉(zhuǎn)換成合適的編碼格式。

如果要寫入文件,那要先解碼unicode,在編碼成UTF-8

如:

>>>a="\u8d1f\u8d23\u4eba"

>>>a

>>>'\\u8d1f\\u8d23\\u4eba'

>>>print a

>>>\u8d1f\u8d23\u4eba

>>>>>> a=a.decode("unicode-escape")#反編碼成unicode碼

>>> a

u'\u8d1f\u8d23\u4eba'

>>> print a

負責(zé)人

print 輸出的時候會自動解碼

但是當我們要寫入文件的時候呢

>>> fname="test.txt"

>>> f=open(fname,'w')

>>> f.write(a)

Traceback (most recent call last):? File "", line 1, inf.write(a)

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128

這時就需要先轉(zhuǎn)碼了

>>> f.write(a.encode("utf-8"))

查看文件寫入的內(nèi)容:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容