真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中urllib2中文亂碼的解決方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的漢壽網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

python中urllib2中文亂碼的解決方法?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

很多亂碼問題是編碼造成的,一般對(duì)于中文網(wǎng)站基本是UTF-8,GB2312,可以GB18030通吃。

另一個(gè)造成亂碼的原因是壓縮格式,很多規(guī)模較大的網(wǎng)站都是以gzip的壓縮格式輸出頁(yè)面的,所以在用BS解析之前需要先判斷該網(wǎng)頁(yè)是否經(jīng)過壓縮,如果經(jīng)過壓縮則先進(jìn)行解壓操作。

代碼:

# coding: u8
import urllib2
url = "http://sports.sina.com.cn/g/premierleague/index.shtml"
response = urllib2.urlopen(url)
html = response.read()
print html

輸出:

w?83’?L/J
.uV?[w5;:S煝{7l!Zp8′-y?=ePUs?;__Zj
::]K?
eY?kV%IBUVY”*’)?S.
JT>”TTZk+!x*)ld2I,kUU?/kXjjkHI U0n2}jUS?”>!pj^[?g’o^=Nq?7n|57yy’\ul
j=9T,g/t0?7’^o|v}>8=7?!tp??gFS?zd~`MuC%U2\ f?Vq?7~2~?lE=}M}Xwo}us’>?*zpS:7O?~чb=
HK!s?inQR}@TsY|,#b\d+#yM@qaRTPVNw
?[((tGP,A$O/EXP)oNgA\`Z
4
eL7?Vn+
?eR fT`&W?bV
f{
j_p@-@[Ib_?CZ’!4O1C,?hy b0W(?Z?V5-?X)5{EkvXYN (PPUCk?? j(
V3{Z!LOOP+LP%WPL!\=! @XD8?jpT,W+#we~? {CBo@_Y+ijp;^,=(h :NxH|Ar]-|Bkq<
?+}.?lt.)cptRXJ4CJ?Bv@BXdP&6dógsR^=/fb@s#m} uZh.V80_)$.1W
hS*zQJ?|?{nIPa±a#?L5#FzFG-%?
W0A{T?#u4@e24?*:*6?t&XGe@dc%c?h|?y$HhGv3s$(Y)sYMvE@lC(.tk?6K(E;Op1?:
D6wО?fO&zqZ3Z>0MC{?i#.
tP?u-u-t38X Wt2h!.>9;TVKrj_$yABZ?6.?I\yK:¬
s#lhsxzb=INse/FUad4H3lnHo0T^”j*]yfrMY!?-#I(YVaΡ@1kE?2=qRt?h@y@(GX)I-Z$lNX,vg^~cE
/虬&jz=АUdY__\FGA} …

首先想到編碼問題

isinstance(html, str) == True

并且頁(yè)面的編碼確定為 GBK,那么

html.decode('gbk').encode('utf-8')

就可以將機(jī)器碼以 gbk 解碼,再重新以 utf-8 編碼,就可以得到正確的文本??墒鞘盏竭@樣的提示:

UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 1-2: illegal multibyte sequence

可能是以 gzip 壓縮格式輸出造成的亂碼,于是嘗試通過 zlib 解壓縮。

import zlib
html = zlib.decompress(html)

可是卻得到下面的錯(cuò)誤:

zlib.error: Error -3 while decompressing data: incorrect header check

無奈,只得用 gzip 庫(kù)和 StringIO 庫(kù)繞路解決。

import gzip, StringIO
html = gzip.GzipFile(fileobj=StringIO.StringIO(html), mode="r")
html = html.read().decode('gbk').encode('utf-8’)

終于得到了正確的內(nèi)容和正確的編碼。

問題到這里就解決了,可是對(duì)于不能直接使用簡(jiǎn)潔的 zlib 庫(kù)表示很不甘心,畢竟根據(jù) python 的文檔 gzip 庫(kù)也是調(diào)用 zlib 來解壓的,為什么不直接用 zlib 呢?最終代碼如下:

request = urllib2.Request(url)
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
response = opener.open(request)html = response.read()
gzipped = response.headers.get('Content-Encoding')
if gzipped:
    html = zlib.decompress(html, 16+zlib.MAX_WBITS)
print html

代碼里在 request header 中默認(rèn)加入了接受 gzip,服務(wù)器會(huì)優(yōu)先返回 gzip 后的頁(yè)面,這樣極大減少數(shù)據(jù)流的大小,絕大多數(shù)服務(wù)器都是支持 gzip 的。之后對(duì)于意外情況,也加入了對(duì) response header 的判斷,對(duì)于不包含“Content-Encoding”的數(shù)據(jù)流就不會(huì)去對(duì)其解壓縮。

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)python中urllib2中文亂碼的解決方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。


網(wǎng)站題目:python中urllib2中文亂碼的解決方法-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)URL:http://weahome.cn/article/csjpoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部