Python urllib urlencode 处理 æøå 的问题

5 投票
2 回答
11446 浏览
提问于 2025-04-16 05:54

我该怎么把一个包含特殊字符æøå的字符串进行URL编码呢?

比如:

urllib.urlencode('http://www.test.com/q=testæøå')

我遇到了这个错误 :(..

不是有效的非字符串序列或映射对象

2 个回答

26

urlencode 是用来处理字典的,比如说:

>>> q= u'\xe6\xf8\xe5' # u'æøå'
>>> params= {'q': q.encode('utf-8')}
>>> 'http://www.test.com/?'+urllib.urlencode(params)
'http://www.test.com/?q=%C3%A6%C3%B8%C3%A5'

如果你只是想对一个单独的字符串进行URL编码,那么你需要用的函数是 quote

>>> 'http://www.test.com/?q='+urllib.quote(q.encode('utf-8'))
'http://www.test.com/?q=%C3%A6%C3%B8%C3%A5'

我猜UTF-8是正确的编码方式(对于现代网站来说应该是这样)。如果你想要的结果是 ?q=%E6%F8%E5,那么你可能需要的编码是 cp1252(这和 iso-8859-1 类似)。

9

你应该把字典传给urlencode,而不是字符串。下面是正确的例子:

from urllib import urlencode
print 'http://www.test.com/?' + urlencode({'q': 'testæøå'})

撰写回答