本文目錄一覽:
- 1、如何解決mac python3 中文亂碼
- 2、Python+requests 爬取網站遇到中文亂碼怎麼辦
- 3、python寫文件中文亂碼
- 4、為什麼python文件打開有亂碼
- 5、使用python的WSGI介面做的一個web應用,瀏覽器訪問出現中文的時候顯示亂碼
如何解決mac python3 中文亂碼
解決mac python3中文亂碼的方法:
在文件的最上面加上「#coding=utf-8」語句,#與coding之間有一個空格,該語句是告訴編輯器以utf-8的格式對中文字元進行解碼
示例如下:
這樣輸出的中文就不是亂碼了。
更多Python知識,請關註:Python自學網!!
Python+requests 爬取網站遇到中文亂碼怎麼辦
1. 遇到的中文亂碼問題
1.1 簡單的開始
使用requests來拔取網站內容十分方便,一個最簡單的代碼段只需要2-3行代碼就行。
點擊(此處)摺疊或打開
url = ‘http//’
req = requests.get(url)
print(req.text)
tree = html.fromstring(req.text)
print(tree.xpath(“//h1[@class=’title’]/text()”))
上面的代碼段起作用的也就3行(2,4,5)代碼就獲取到我們想要的內容。當然還要導入一系列的包,比如說requests、lxml、html等。當然由於http//是英文網站,不存在中文亂碼問題。
1.2 麻煩的開始
本來當時的想法是寫一些基礎模塊,方便之後開發的時候調用,減少重複性工作。為了保證代碼在任何情況下都不會出現bug,所以想著用同樣的代碼爬取中文網站獲取裡面的文字
修改上面代碼中的兩行代碼:
點擊(此處)摺疊或打開
url = ”
print(tree.xpath(“//span[@class=’sec_blk_title’]/text()”))
運行程序可以發現,在語句print(req.text)輸出的內容中,中文字體已經是亂碼了。最後的結果輸出是[‘?????©è§\x86é?\x91’, ‘??\x80?\x9c\x9f?\x9b\x9eé??’]
2 亂碼解決辦法
2.1 試錯
由於之前爬取csdn上一個網頁沒有出現亂碼問題,但是在sina體育網站上出現了亂碼,所以當時以為不是編碼問題,以為是文檔壓縮問題。因為csdn獲取的頁面header里沒有「Content-Encodings」屬性,但是sina體育獲取的頁面header有「Content-Encodings」屬性–「Content-Encoding: gzip」。
總結:參考上述文獻,結果還是沒有解決問題,但是就考慮是不是方向錯了。不過這部分工作也沒有白做,很多網站返回數據都會有壓縮問題,之後的工作中也能用上。
2.2 亂碼終極解決辦法
後來查閱官方文檔中response-content相關內容,說明了Requests會自動解碼來自伺服器的內容。Requests會基於HTTP頭部對響應的編碼作出有根據的推測,前提是響應文檔的HTTP headers裡面沒有相關字符集說明。官方文檔還說明了,如果你創建了自己的編碼,並使用codecs 模塊進行註冊,你就可以輕鬆地使用這個解碼器名稱作為 r.encoding 的值, 然後由Requests來為你處理編碼。(自己沒有使用codecs模塊,所以這裡不貼代碼了,不過按官方的說法使用codecs模塊是最簡單的一種方式。)
另一份官方文檔片段明確說了reponse編碼處理方式:
Requests遵循RFC標準,編碼使用ISO-8859-1 。
只有當HTTP頭部不存在明確指定的字符集,並且 Content-Type 頭部欄位包含 text 值之時, Requests才不去猜測編碼方式。
現在直接上實驗結果,在原始代碼中添加以下代碼片段:
點擊(此處)摺疊或打開
print(req.headers[‘content-type’])
print(req.encoding)
print(req.apparent_encoding)
print(requests.utils.get_encodings_from_content(page_content.text))
輸出結果分別是:
text/html
ISO-8859-1#response內容的編碼
utf-8#response headers里設置的編碼
[‘utf-8’]#response返回的html header標籤里設置的編碼
返回的內容是採用『ISO-8859-1』,所以出現了亂碼,而實際上我們應該採用『utf-8』編碼
總結:當response編碼是『ISO-8859-1』,我們應該首先查找response header設置的編碼;如果此編碼不存在,查看返回的Html的header設置的編碼,代碼如下:
點擊(此處)摺疊或打開
if req.encoding == ‘ISO-8859-1’:
encodings = requests.utils.get_encodings_from_content(req.text)
if encodings:
encoding = encodings[0]
else:
encoding = req.apparent_encoding
encode_content = req.content.decode(encoding, ‘replace’).encode(‘utf-8’, ‘replace’)
python寫文件中文亂碼
這是因為IDLE中使用gbk編碼,是ascii擴展字符集。
import sys
sys.getdefaultencoding()
‘ascii’解決方法:
在IDLE中執行的時候
去掉字元串前面的u字元,也不要加#coding這一行。
2. 先import sys,然後reload(sys),再使用sys.setdefaultencoding(“utf-8”)。然後就可以列印前面帶u的字元串了。(這是搜來的方法,實驗了一下,發現在我這沒有輸出了。。重啟了IDLE,才可以輸出,不過又變會ascii了)
在文件中執行
在文件開頭聲明#coding行,文件保存為utf8編碼,在字元串開頭加u
為什麼python文件打開有亂碼
腳本開頭加 # -*- coding: utf-8 -*-用文本編輯器 打開腳本文件,將腳本文件的編碼 設置成 ANSI,保存腳本,在 IDLE 中運行,查看結果正常;# -*- coding: utf-8 -*-#這是一個注釋的練習print “這是我的第一個學習練習。Python 2″測試結果,中文顯示正常。
使用python的WSGI介面做的一個web應用,瀏覽器訪問出現中文的時候顯示亂碼
我這邊沒有報錯,你的文件編碼是utf8的,你的path_info編碼應該也是utf8的,不應該使用gb2312解碼呀。
如果解決了您的問題請採納!
如果未解決請繼續追問
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286504.html