在编写网络应用的时候难免会使用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
# 解码
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=中国
网友评论