urllib.unquote乱码问题

django python devops 阅读:577

今天发现一个问题是平台session过期后重新登录再重定向到原来停留页面后和原来的选择标签不一样,发现是重定向过去的参数中文是乱码的:image.png

后端的解码方法是unquote(original_url),直接将解码前original_url字符串在ipython中解码发现正常:

image.png

但是在后台中解码却是安卓的乱码,百思不得其解啊!


原来django,tornado,flask等web框架request.args接收的参数都是unicode,而unquote处理unicode类型的字符时直接将"%"替换为"\x",所以原来的u"%E5%AE%89%E5%8D%93”被替换为了u"\xe5\xae\x89\xe5\x8d\x93",而u"\xe5\xae\x89\xe5\x8d\x93"是一个ascii码字符串,'e5','ae'这些是ascii的扩展字符,范围为128-255,“e5”对应的ascii为229,对应的符号是å,“ae”对应的ascii为174,对应的符号是®,这就是导致乱码的原因。

解决办法是将unicode转为string在解码:

unquote(str(original_url))



参考文献:

https://www.ascii-code.com/