utf-8在編程和網(wǎng)頁(yè)設(shè)計(jì)中越來越普遍,統(tǒng)一的漢字編碼方式可以為我們省卻很多麻煩。
因此建議新設(shè)計(jì)網(wǎng)頁(yè)都采用utf-8的編碼方式。
但是,如果python在win下用cgi方式發(fā)布utf-8頁(yè)面,常常會(huì)出現(xiàn)奇怪的亂碼問題。
例如
pycharm編輯器截圖
瀏覽器截圖
明明源代碼是utf-8格式的了,傳遞的html也聲明也為utf-8了,瀏覽器也支持utf-8,但是卻顯示亂碼。這是什么原因呢?
其實(shí)原因在于圖中第3步"直接用print"輸出。
我們的測(cè)試平臺(tái)是win,這個(gè)平臺(tái)的控制臺(tái)默認(rèn)的工作編碼是gbk,
python內(nèi)部編碼是utf-8,現(xiàn)在工作在默認(rèn)gbk的平臺(tái)上,這種情況下print會(huì)自動(dòng)將utf-8轉(zhuǎn)換成gbk編碼以便在平臺(tái)上正確顯示。
而我們向?yàn)g覽器輸出網(wǎng)頁(yè)內(nèi)容,瀏覽器是能支持utf-8且網(wǎng)頁(yè)內(nèi)也指定了utf-8編碼,這種情形下不需要做編碼轉(zhuǎn)換,如果print一廂情愿的將中文轉(zhuǎn)為gbk反而幫了倒忙。
解決的辦法很簡(jiǎn)單,就是自己寫一個(gè)強(qiáng)制輸出utf-8格式的輸出函數(shù),取代原始的print就可以了
def printu8(*args): f=open(1, 'w', encoding='utf-8', closefd=False) print(*args, file=f) f.flush() f.close()
用自定義的輸出函數(shù)替代原始的print之后的代碼
這樣,瀏覽器就能正確顯示utf-8中文了
解決了中文輸出的問題之后,我們就可以做一個(gè)完整的報(bào)名網(wǎng)站了,下期貼出全部代碼,感謝繼續(xù)關(guān)注“有只狗狗叫多多”,不要錯(cuò)過哦。。。
我們抓取數(shù)據(jù)的時(shí)候,經(jīng)常用到谷歌瀏覽器開發(fā)者工具,谷歌瀏覽器更新后,新版的谷歌瀏覽器去掉了編碼設(shè)置的功能,出現(xiàn)亂碼時(shí),我們就需要安裝插件來解決。
就是這個(gè)插件,大家可以網(wǎng)上搜一下。
安裝的時(shí)候可能會(huì)遇到,無法安裝的問題,可以嘗試修改文件擴(kuò)展名為rar,然后解壓縮到文件夾,通過開發(fā)者模式安裝:
選擇解壓好的文件夾,就可以順利安裝了。
使用很簡(jiǎn)單,安裝后最好重啟一下瀏覽器,讓插件啟用
通過右鍵或這個(gè)插件按鈕來設(shè)置編碼格式,這個(gè)網(wǎng)站的編碼格式是utf-8
設(shè)置好之后,在開發(fā)者工具中按CTRL+R,重新加載一下數(shù)據(jù),再來查看:
這個(gè)時(shí)候我們可以通過直接復(fù)制response來實(shí)現(xiàn)數(shù)據(jù)抓取:
這個(gè)數(shù)據(jù)可以直接識(shí)別為JSON格式,很方便就能找到我們需要的數(shù)據(jù)。