URL网址链接中的中文编码与解码

作者:忘了呼吸的那只猫
发表于:2020.04.04 14:51:55
链接:https://www.jianshu.com/p/9c87139332a0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在编写网络应用的时候难免会使用URL传递一些关键词,有些关键词是中文,就会出现编码问题:

例如:https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E5%9B%BD%E4%BA%BA
实际的内容是:https://www.baidu.com/s?ie=UTF-8&wd=中国人

关于URL网址链接中的中文编码与解码这里有两种思路仅供产考:

1. 通过字符串处理的方式获取被编码的16进制字符串,再进行解码获取到可识别的汉字

获得一个16进制表示的字符串,它的type是str,可以使用eval函数将其转化为二进制,

上代码:

url_s = '%E4%B8%AD%E5%9B%BD%E4%BA%BA'    # URL中被编码的部分
s = url_s.replace('%',r'\x')
b = eval('b' + '\'' + s + '\'')    # 注意这里都是单引号
print(s)
print(b)
print(type(s))
print(type(b))
print(b.decode('utf-8'))

输出为:

'\\xE4\\xB8\\xAD\\xE5\\x9B\\xBD\\xE4\\xBA\\xBA'
b'\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
<class 'str'>
<class 'bytes'>
中国人

这种方法利用简单的字符串处理和编码,通常开发中使用封装好的方法。

2. 使用urllib库中的方法,其他库也有不做多说,只提供思路

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

# 解码
url2 = "https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD"
ret2 = unquote(url2, encoding='utf-8')
print(ret2)
# https://www.baidu.com/s?wd=中国
# By Ross
url3 = "http://52.6.7.6:9080/?json=%7B%22Action%22%3A%22GetAgentPing%22%2C%22ActionID%22%3A%22GetAgentPing0.2878004529042738%22%2C%22Command%22%3A%22Action%22%2C%22PBX%22%3A%221.102.4.106%22%2C%22Exten%22%3A%2225328661%22%7D&timestamp=GetState1636429725795"
ret3 = unquote(url3, encoding='utf-8')
print(ret3)
# 结果:http://52.6.7.6:9080/?json={"Action":"GetAgentPing","ActionID":"GetAgentPing0.2878004529042738","Command":"Action","PBX":"1.102.4.106","Exten":"25328661"}&timestamp=GetState1636429725795
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。