Python使用urllib.quote编码字符

32 投票
3 回答
47826 浏览
提问于 2025-04-16 20:01

我正在尝试对一些非ASCII字符进行编码,这样我就可以把它们放进网址里,并在urlopen中使用。问题是,我想要一种像JavaScript那样的编码方式,比如它会把ó编码成%C3%B3

encodeURIComponent(ó)
'%C3%B3'

但是在Python中,urllib.quote返回的ó却是%F3

urllib.quote(ó)
'%F3'

我想知道如何在Python中实现类似JavaScript的encodeURIComponent的编码方式,还有我是否可以编码一些非ISO 8859-1的字符,比如中文。谢谢!

3 个回答

3

请注意,encodeURIComponent() 这个函数不会对字符 A-Z a-z 0-9 - _ . ! ~ * ' ( ) 进行编码。默认情况下,urllib.parse.quote() 会对其中一些字符进行编码,如果你想在Python中得到一个相同的编码器,就需要传入一个 safe 字符列表。

在Python 3中,正确的解决方案是

from urllib.parse import quote

quote("ó", safe="!~*'()")
46

Python 3中,urllib.quote这个功能被改名为urllib.parse.quote

另外,在Python 3里,所有的字符串都是unicode字符串(字节字符串被称为bytes)。

举个例子:

from urllib.parse import quote

print(quote('ó'))
# output: %C3%B3
39

你需要确保你在使用unicode编码。

举个例子:

import urllib

s = u"ó"
print urllib.quote(s.encode("utf-8"))

输出结果是:

%C3%B3

撰写回答