如何在Python中解码"%E3%83%9C"这类URL编码的UTF-8字符串?
解决URL百分号编码转UTF-8字符串的问题
你遇到的是**URL百分号编码(又称URL编码)**转可读字符串的问题,不用手动折腾正则替换,Python自带工具就能轻松搞定。
推荐解法:使用urllib.parse.unquote
这是最简洁可靠的原生方法,专门用于处理URL编码格式的字符串:
from urllib.parse import unquote mystr = "%E3%83%9C%E3%83%89%E3%82%AB%E3%81%95%E3%82%93" result = unquote(mystr) print(result) # 输出:ボドカさん
你的代码失效原因
你用正则把%替换成\x后,直接调用bytes(mystr, "utf-8")会把\x当成普通文本字符编码,最终生成的是带转义反斜杠的\\x,而非真正的字节值。如果非要手动处理字节转换,可以用以下方式:
mystr = "%E3%83%9C%E3%83%89%E3%82%AB%E3%81%95%E3%82%93" # 拆分编码片段并转换为字节对象 byte_data = bytes.fromhex(''.join(mystr.split('%')[1:])) result = byte_data.decode('utf-8') print(result) # 输出:ボドカさん
手动处理逻辑说明
mystr.split('%')[1:]将编码字符串拆分为['E3', '83', '9C', ...]形式的十六进制片段''.join()把片段拼接成连续的十六进制字符串bytes.fromhex()将十六进制字符串转换为真实的字节对象(与你示例中的b'\xe3\x83\x9c...'完全一致)- 最后通过
decode('utf-8')解码为可读的UTF-8字符串
两种方法中,unquote通用性更强,还能自动处理其他URL编码的特殊字符,优先推荐使用。
内容的提问来源于stack exchange,提问作者Mash
相关产品推荐
相关产品推荐

