Python中如何将编码的Unicode字符串转换为原生字符串
URL编码字符串转换解决方案
问题场景
需要将末尾包含%3D(对应URL编码的=字符)的字符串转换为以=结尾的正常字符串,尝试使用.decode()方法未成功。
原始字符串:
s1 = u'MDcxNTFjZWU5MzQ2MTRjZmZiOWIyNTBhYjJlZDhkODY0OTEyYmE2Yjp7ImFjdHVhbF9jcmVhdGVkX3RpbWVzdGFtcCI6ICIxNjcyNDg5NjAxLjMyOTg5MyIsICJhY3R1YWxfaWQiOiAiYWhGa1pYWi1ibWxuYUhSc2IyOXdMVzVsZDNJakN4SWJibWxuYUhSc2IyOXdYMUpsYzJWeWRtRjBhVzl1UVdOMGRXRnNHTUc3QVF3In0%3D'
目标字符串:
s2 = u'MDcxNTFjZWU5MzQ2MTRjZmZiOWIyNTBhYjJlZDhkODY0OTEyYmE2Yjp7ImFjdHVhbF9jcmVhdGVkX3RpbWVzdGFtcCI6ICIxNjcyNDg5NjAxLjMyOTg5MyIsICJhY3R1YWxfaWQiOiAiYWhGa1pYWi1ibWxuYUhSc2IyOXdMVzVsZDNJakN4SWJibWxuYUhSc2IyOXdYMUpsYzJWeWRtRjBhVzl1UVdOMGRXRnNHTUc3QVF3In0='
解决方案
%3D是URL百分号编码,不是字节编码,因此不能用.decode()处理,需要用专门的URL解码工具:
Python 2 环境
import urllib s1 = u'MDcxNTFjZWU5MzQ2MTRjZmZiOWIyNTBhYjJlZDhkODY0OTEyYmE2Yjp7ImFjdHVhbF9jcmVhdGVkX3RpbWVzdGFtcCI6ICIxNjcyNDg5NjAxLjMyOTg5MyIsICJhY3R1YWxfaWQiOiAiYWhGa1pYWi1ibWxuYUhSc2IyOXdMVzVsZDNJakN4SWJibWxuYUhSc2IyOXdYMUpsYzJWeWRtRjBhVzl1UVdOMGRXRnNHTUc3QVF3In0%3D' s2 = urllib.unquote(s1) # 输出结果即为目标字符串 print(s2)
Python 3 环境
from urllib.parse import unquote s1 = 'MDcxNTFjZWU5MzQ2MTRjZmZiOWIyNTBhYjJlZDhkODY0OTEyYmE2Yjp7ImFjdHVhbF9jcmVhdGVkX3RpbWVzdGFtcCI6ICIxNjcyNDg5NjAxLjMyOTg5MyIsICJhY3R1YWxfaWQiOiAiYWhGa1pYWi1ibWxuYUhSc2IyOXdMVzVsZDNJakN4SWJibWxuYUhSc2IyOXdYMUpsYzJWeWRtRjBhVzl1UVdOMGRXRnNHTUc3QVF3In0%3D' s2 = unquote(s1) # 输出结果即为目标字符串 print(s2)
补充说明
.decode()方法的作用是将字节类型(bytes)的数据解码为字符串类型,而你的字符串已经是Unicode字符串,其中的%3D是URL编码的字符表示,属于字符串层面的编码,因此必须使用URL解码函数来还原原始字符。
内容的提问来源于stack exchange,提问作者Dave Kalu
相关产品推荐
相关产品推荐

