idea console中文乱码_Python3的字符编码乱码问题解决思路
在亂碼問題上,Python3相比Python2已經(jīng)好多了,但在處理外來字符時(shí)比如文件或者網(wǎng)站時(shí)還是會(huì)出現(xiàn)亂碼問題。
亂碼的原因很多,一個(gè)是來源的字符編碼在接收時(shí)處理不當(dāng),編程語言默認(rèn)的UTF8處理gb2312字符時(shí)沒聲明encoding,當(dāng)然會(huì)出錯(cuò)。二是在代碼用到的第三方代碼使用了默認(rèn)encoding處理了。三是在控制臺(tái)或者文本編輯器中,這些程序本身也有默認(rèn)的encoding。這三個(gè)環(huán)節(jié)沒處理好都會(huì)出現(xiàn)亂碼問題。
以一個(gè)最常見的爬蟲程序?yàn)槔>W(wǎng)站在head里本身雖然聲明了gbk charset,但有可能是錯(cuò)的。 首先我們要確保requests沒有改變編碼,而用response.content 就可以確保這一點(diǎn),因?yàn)樗亲止?jié)流,也就是requests下載的原生內(nèi)容。然后我們可以調(diào)用charset.detect方法判斷encoding,結(jié)果輸出是gb2312
知道來源的編碼至關(guān)重要,不然我們就不清楚哪里出了錯(cuò),只能不停試驗(yàn)可以的組合編碼和轉(zhuǎn)換。知道原有的編碼以后,就可以在隨后的每一行代碼里查看encoding是否發(fā)生改變,如果出現(xiàn)亂碼,就可以肯定在這一行指定的encoding有錯(cuò)。
一般來說我們可以print下查看是否有亂碼。但這里有個(gè)巨大的坑,要看你用的操作系統(tǒng),終端程序或者IDE。象windows可能是gb2312或者UTF16, Linux則要設(shè)置Locale系統(tǒng)變量。而且就算你設(shè)置對(duì)了,還要考慮是否當(dāng)前字體是否支持中文,不然也是亂碼。
萬能的SO有高人給了一個(gè)方法可以無視console的encoding, 直接用sys.out.buffer.write() ,但前提是stdout用了正確的編碼匹配你的字符變量的編碼。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')完整的程序如下,在cmd.exe, pycharm, wsl終端下都可以完美顯示
import 掃碼關(guān)注公眾號(hào),獲取更多文章總結(jié)
以上是生活随笔為你收集整理的idea console中文乱码_Python3的字符编码乱码问题解决思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs html引用js_Node
- 下一篇: api如何使用_什么是API, API是