Python 2.7 如何将含特殊字符的字符串转为URL所需的UTF-8编码字节
问题根因
Python 2.7 中存在两类字符串:不带u前缀的str是字节串,带u前缀的unicode是统一编码对象。你遇到的编码错误是因为urllib.quote()会直接对输入的字节串做百分号转义,而你拿到的动态输入字符串默认不是UTF-8编码,转义后自然不符合URL要求的UTF-8编码规则。
解决方法
你只需要对动态输入做两次编码转换即可:
- 先将动态输入的字节串按其原始编码解码为
unicode对象 - 再将
unicode对象编码为UTF-8字节串,传给urllib.quote()处理
示例代码
import urllib # 模拟动态输入的字符串(和你示例中的输入一致) user_input = 'code - Brasilândia' # 第一步:将输入字节串解码为unicode,根据输入的实际原始编码替换下方的编码规则 # 常见编码可选:cp1252(Windows默认)、gbk(中文Windows默认)、utf-8、latin-1 unicode_input = user_input.decode('cp1252') # 第二步:转成UTF-8字节串后做URL编码 url_safe_str = urllib.quote(unicode_input.encode('utf-8')) print(url_safe_str) # 输出:code%20-%20Brasil%C3%A2ndia,和要求的格式完全匹配
补充说明
如果不确定输入字符串的原始编码,可以先打印print(repr(user_input))查看字节序列,再匹配对应的编码规则即可。
内容的提问来源于stack exchange,提问作者Karol Duarte
相关产品推荐
相关产品推荐

