【问题标题】:Python urllib urlencode problem with æøåPython urllib urlencode 问题与æøå
【发布时间】:2010-10-22 21:04:37
【问题描述】:

如何对带有特殊字符 æøå 的字符串进行 urlencode?​​p>

例如

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

我得到这个错误:(..

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

【问题讨论】:

    标签: python urlencode urllib


    【解决方案1】:

    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)。

    【讨论】:

      【解决方案2】:

      您应该将字典传递给 urlencode,而不是字符串。请参阅下面的正确示例:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多