2009-08-20 45 views
2

我希望getencoding的輸出在下面的Python會話是 「ISO-8859-1」:是否在urllib2中破壞了response.info()。getencoding()的實現?

>>> import urllib2 
>>> response = urllib2.urlopen("http://www.google.com/") 
>>> response.info().plist 
['charset=ISO-8859-1'] 
>>> response.info().getencoding() 
'7bit' 

這與Python版本2.6('2.6(R26:66714,2009年8月17日,16 :01:07)\ n [特別是GCC 4.0.1(Apple Inc. build 5484)]。

+0

我期望擁有'charset = UTF-8'。這是我在google.com上查看源代碼時得到的結果。 – 2009-08-20 22:45:08

+0

據我所知,這種方法只會看標題,而不是頁面中的meta標籤: $ curl -I http://www.google.com/ HTTP/1.1 200 OK Date:Thu ,20 Aug 2009 22:40:54 GMT Expires:-1 Cache-Control:private,max-age = 0 Content-Type:text/html; charset = ISO-8859-1 Set-Cookie:PREF = ID = 7592ab15eefe9966:TM = 1250808054:LM = 1250808054:S = KaPYgHdNyGx7eglv;到期= 2011年8月20日星期六22:40:54 GMT;路徑= /; domain = .google.com Server:gws Transfer-Encoding:chunked – John 2009-08-20 22:50:04

+0

好吧,我猜評論不會採用與帖子相同的格式,但您明白了。 – John 2009-08-20 22:51:22

回答

0

那麼,你認爲是什麼被打破?

我得到ISO-8859-2 urllib和wget(我目前在波蘭)。我用Firefox獲得UTF-8。這是因爲我的Firefox告訴網站它接受ISO-8859-1和UTF-8,而wget和urllib2沒有說什麼。相關的請求頭是:

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 

刪除UTF-8從,你就不會通過Telnet遠程登錄到端口獲得UTF-8,易於測試的80

Google.com簡單(合理)默認爲ISO-8859-1,google.pl爲ISO-8859-2,我相信其他網站還有其他默認值。

我沒有得到wget,urllib2或telnet的編碼頭文件,我猜測urllib2會假設7位,這可能有點不合理,因爲Content-Encoding通常是gzip或者什麼都不是。

0

根據the document

Message.getencoding()

返回在內容傳送編碼消息報頭中指定的編碼。如果不存在這樣的頭文件,則返回'7bit'。編碼轉換爲小寫。