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

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

作者: 忘了呼吸的那只猫 | 来源:发表于2020-04-04 14:51 被阅读0次

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

相关文章

网友评论

      本文标题:URL网址链接中的中文编码与解码

      本文链接:https://www.haomeiwen.com/subject/zmhjphtx.html