Python使用urllib.quote编码字符
我正在尝试对一些非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