代码仓库地址: Sign in · GitLab
请求地址中中文解析问题,代码中已完善:
问题原因:
在URL中出现中文时,浏览器在发起请求时,会自动对URL中的中文进行编码,然后再转成2进制进行传输,当服务端收到数据后,使用decode解码后,仅从二进制转成字符,但是中文的编码依然还是url的编码状态,所以不能正常解析。
示例:
url原始地址 | url 编码后 | 二进制传输值 |
---|---|---|
a张三b | a%E5%BC%A0%E4%B8%89b | 01100001 0101010 … 0010101 01100010 |
服务器接收后解析过程:
接收的二进制值 | decode解码后 |
---|---|
01100001 0101010 … 0010101 01100010 | a%E5%BC%A0%E4%B8%89b |
服务器增加URL解码的解析过程:
接收的二进制值 | decode解码后 | URL解码 |
---|---|---|
01100001 0101010 … 0010101 01100010 | a%E5%BC%A0%E4%B8%89b | a张三b |
解决办法:
使用 urllib 包中 parse 模块中的 unquote 方法进行解析URL中的中文
from urllib.parse import unquote
url = "https://www.example.com/add?name=%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81"
decoded_url = unquote(url)
print(decoded_url)