如何用Python进行URL安全编码?urllib.quote错误

3 投票
5 回答
9886 浏览
提问于 2025-04-16 19:30

你好,我想知道有没有其他方法可以把字符串编码成安全的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和查询字符串部分的编码不同?

撰写回答