1. 程式人生 > 程式設計 >Python使用urllib模組對URL網址中的中文編碼與解碼例項詳解

Python使用urllib模組對URL網址中的中文編碼與解碼例項詳解

URL網址連結中的中文編碼說明

中文的gbk(GB2312)編碼: 一個漢字對應兩組%xx,即%xx%xx

中文的UTF-8編碼: 一個漢字對應三組%xx,即%xx%xx%xx

可以利用百度進行URL編碼解碼 預設gbk

https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD

python3編碼解碼示例

# -*- coding: utf-8 -*-

# @File  : urldecode_demo.py
# @Date  : 2018-05-11

from urllib.request import quote,unquote

# 編碼

url1 = "https://www.baidu.com/s?wd=中國"

# utf8編碼,指定安全字元
ret1 = quote(url1,safe=";/?:@&=+$,",encoding="utf-8")
print(ret1)
# https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD

# gbk編碼
ret2 = quote(url1,encoding="gbk")
print(ret2)
# https%3A//www.baidu.com/s%3Fwd%3D%D6%D0%B9%FA


# 解碼
url3 = "https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD"

ret3 = unquote(url3,encoding='utf-8')
print(ret3)
# https://www.baidu.com/s?wd=中國

例項中我們使用到了urllib模組和urllib.unquote()函式

import urllib
rawurl=xxx
url=urllib.unquote(rawurl)

所用模組:urllib

所用函式:urllib.unquote()

案例

import urllib
rawurl = "%E6%B2%B3%E6%BA%90"
url = urllib.unquote(rawurl)
print url

輸出

河源

urllib.unquote()目的是對url編碼進行解碼,與該函式對應的是編碼函式urllib.quote()

>>> import urllib
>>> urllib.quote("河源")
'%E6%B2%B3%E6%BA%90

問題擴充套件

URL為何要編碼、解碼?

通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私資料。對於Url來說,之所以要進行編碼,是因為Url中有些字元會引起歧義。

例如,Url引數字串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8。如果你的value字串中包含了=或者&,那麼勢必會造成接收Url的伺服器解析錯誤,因此必須將引起歧義的&和=符號進行轉義,也就是對其進行編碼。

又如,Url的編碼格式採用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字元,例如中文。否則如果客戶端瀏覽器和服務端瀏覽器支援的字符集不同的情況下,中文可能會造成問題。

更多關於Python使用urllib模組對URL編碼與解碼例項請檢視下面的相關連結