使用web.py接收post數據時中文變成xxxx;的問題


使用web.py接收post數據時中文變成&#xxxxx;,英文不變,如下所示。

Page

# post處理函數部分代碼
def POST(self):
    print '<Handle>post'
    webData = web.input()
    print webData
    if webData:
        data = webData.get('data')
        print data, type(data)

Result


這裏就需要了解一下HTML的轉義序列(Escape Sequence),即字符實體(Character Entity)。
在HTML中,<>&等有特殊含義,不能直接使用,有些字符在ASCII字符集中沒有定義,所以需要使用轉義序列來表示。
轉義序列分成三部分,&符號(Ampersand),實體(Entity)名稱或#符號加上實體編號,;符號(Semicolon)。
如常用的不斷行空白格的實體名稱爲&nbsp;,實體編號爲&#160;
實體名稱便於理解和記憶,但不能保證所有瀏覽器能順利識別,特別是新的實體名稱;實體編號各種瀏覽器都能處理。


在python中,使用如下代碼解決轉義序列問題。

from HTMLParser import HTMLParser
print HTMLParser().unescape('CSDN&#21338;&#23458;')

於是在接收post的數據後進行解轉義。

# post處理函數部分代碼
def POST(self):
    print '<Handle>post'
    webData = web.input()
    print webData
    if webData:
        data = webData.get('data')
        data = HTMLParser().unescape(data)
        print data, type(data)

Result2


參考資料:
HTML字符實體(Character Entities)…
&#x開頭的是什麼編碼呢。瀏覽器可以解釋它。…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章