如何用Python进行URL安全编码?urllib.quote错误
你好,我想知道有没有其他方法可以把字符串编码成安全的URL,因为urllib.quote的结果不对,输出和我预期的不一样:
如果我尝试
urllib.quote('á')
我得到的结果是
'%C3%A1'
但这不是正确的输出,应该是
%E1
这个问题可以在这里的工具中看到 这个网站
这不是我在刁难,quote输出的不正确导致浏览器无法找到资源,如果我尝试
urllib.quote('\images\á\some file.jpg')
然后我用我提到的JavaScript工具尝试,得到的字符串分别是
%5Cimages%5C%C3%A1%5Csome%20file.jpg
%5Cimages%5C%E1%5Csome%20file.jpg
注意这两个几乎一样,但quote提供的URL不工作,而另一个却可以。我尝试在传给quote的字符串上使用encode('utf-8'),但没有任何区别。我还尝试了其他带重音符的西班牙单词和ñ,它们的表示方式都不同。
这是Python的bug吗?你知道哪个模块能正确处理这个问题吗?
5 个回答
1
Python 默认使用 ASCII 编码来解释代码,所以即使你的文件用其他编码方式保存,里面的 UTF-8 字符也会被当作两个 ASCII 字符来处理。
你可以尝试在代码的第一行或第二行加一个注释,这样可以让文件编码匹配,另外你可能还需要使用 u'á'
这样的写法。
# coding: utf-8
3
好的,我明白了,我需要像这样把内容编码成iso-8859-1格式
word = u'á'
word = word.encode('iso-8859-1')
print word
7
根据RFC 3986的规定,%C3%A1
是正确的。字符在进行百分比编码之前,应该先使用UTF-8转换成一个字节流。你提供的网站信息已经过时了。
想了解更多关于URL中非ASCII字符处理历史的内容,可以查看为什么URL和查询字符串部分的编码不同?。