Python使用urllib模块对URL网址中的中文编码与解码实例详解
本文详解Python中利用urllib模块处理URL中文编码与解码的方法。通过urllib.quote进行编码(支持UTF-8和GBK),使用urllib.unquote进行解码,解决URL中特殊字符歧义及非ASCII字符传输问题,并提供完整代码示例。
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为何要编码、解码?
通常需要对某些内容进行编码,是因为该内容不适合直接传输。原因多种多样,例如体积过大或包含隐私数据。对于URL而言,进行编码是为了避免其中某些字符引起歧义。
例如,URL参数字符串中使用key=value键值对的形式传递参数,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果value字符串中包含了=或者&,势必会造成接收URL的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。
此外,URL的编码格式采用的是ASCII码,而不是Unicode。这意味着不能在URL中包含任何非ASCII字符,例如中文。如果客户端浏览器和服务端浏览器支持的字符集不同,中文可能会导致问题。
更多关于Python使用urllib模块对URL编码与解码实例请查看下面的相关链接
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









