2014-05-18 37 views
2

我不明白爲什麼當我使用Requests library發出HTTP請求時,那麼我要求顯示命令.text,對特殊字符(如重音符號)進行編碼(é = é)例)。在Python中顯示HTML請求時錯誤的編碼

然而,當我嘗試r.encoding,我得到utf-8

此外,問題只出現在某些網站上。有時我有正確的人物,但其他時間,根本不是。

嘗試如下:

r = requests.get("https://gks.gs/login") 
print r.text 

有其顯示編碼的字符,我們可以看到Mot de passe oublié ?

我不明白爲什麼。你認爲這可能是因爲https嗎?如何解決這個問題?

回答

1

這些都是HTML轉義代碼,通常被稱爲HTML entities。如您所見,HTML使用自己的代碼來替換保留的符號。

您可以使用庫HTMLParser

parser = HTMLParser.HTMLParser 
parsed = parser.unescape(r.text) 
1

這些是在HTML編碼字符集中定義的HTML escape codes。即使某個文檔可能以UTF-8編碼,HTML(及其祖父,SGML)也被定義回ASCII的古老時代。訪問WWW上的HTML頁面的系統可能本身不支持擴展字符,開發人員需要一種方法來爲某些用戶定義「高級」字符,同時適合其系統無法支持的其他用戶優雅地使用。由於UTF-8標準化在其創始人眼中只是一個閃光點,因此開發了一種編碼系統來描述不屬於ASCII的字符。瀏覽器開發人員需要通過字形或擴展字體來實現顯示這些擴展字符的方式。

1

使用&sometihg;編碼的特殊字符在任何HTML中都是「合法」的,儘管看起來有點奇怪,但它們被認爲是有效的。

該文本應該由某個HTML瀏覽器呈現,並且無論您是否使用給定構造或直接找到這些字符,都會產生正確的結果。

有關說明如何將這些編碼的字符看HTML Entity Codes to Text

3

這些HTML character entity references,來解碼最簡單的方法是:

在Python 2.x中:

>>> import HTMLParser 
>>> HTMLParser.HTMLParser().unescape('oublié') 
'oublié' 

在Python 3。 x:

>>> import html.parser 
>>> html.parser.HTMLParser().unescape('oublié') 
'oublié'