【发布时间】:2010-10-22 21:04:37
【问题描述】:
如何对带有特殊字符 æøå 的字符串进行 urlencode?p>
例如
urllib.urlencode('http://www.test.com/q=testæøå')
我得到这个错误:(..
不是一个有效的非字符串序列或 映射对象
【问题讨论】:
如何对带有特殊字符 æøå 的字符串进行 urlencode?p>
例如
urllib.urlencode('http://www.test.com/q=testæøå')
我得到这个错误:(..
不是一个有效的非字符串序列或 映射对象
【问题讨论】:
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)。
【讨论】:
您应该将字典传递给 urlencode,而不是字符串。请参阅下面的正确示例:
from urllib import urlencode
print 'http://www.test.com/?' + urlencode({'q': 'testæøå'})
【讨论】: