有时我们看到某网页地址在浏览器中是正常显示的,但是复制粘贴到代码编辑器中就显示为乱码了,这种情况对含有中文的网页地址尤为明显。那如何在代码编辑器中也正常显示网页地址呢?这就涉及到网页地址的解码与编码了。
采用python标准库中的urllib.parse模块的quote函数与unquote函数可简单解决此问题。
1.网络地址的解码
采用unquote函数实现解码。
示例如下:
In [74]: u2
Out[74]: 'https://baike.baidu.com/item/%E8%A0%95%E8%99%AB'
In [75]: from urllib.parse import unquote
In [76]: r_u2 = unquote(u2)
In [77]: r_u2
Out[77]: 'https://baike.baidu.com/item/蠕虫'
可以看到,乱码显示的网络地址u2
,经过unquote函数的处理后,就正常显示了。
2.网络地址的编码
采用quote函数实现编码。
示例如下:
In [77]: r_u2
Out[77]: 'https://baike.baidu.com/item/蠕虫'
In [78]: from urllib.parse import quote
In [79]: quote(r_u2)
Out[79]: 'https%3A//baike.baidu.com/item/%E8%A0%95%E8%99%AB'
此时,r_u2
虽然重新被编码了,但请注意,https
后面的冒号也被编码为%3A
了,这不是我们想要的结果。
解决办法就是,在quote函数中继续引入safe参数,表明safe参数的值不会被编码转换,默认的safe参数为/
。在下面的safe参数中加入:
号。
In [82]: quote(r_u2, safe='/:')
Out[82]: 'https://baike.baidu.com/item/%E8%A0%95%E8%99%AB'
此时,问题就完美解决了。
总结:urllib.parse模块的quote函数与unquote函数很简单实用,值得掌握。