如何在Python中将UTF-8字符串转换为符合URL的字符串?

时间:2012-08-08 10:48:11

标签: python unicode utf-8 urllib2 urllib

我确定我不是第一个遇到这个问题的人。但经过几个小时的调试,谷歌搜索和StackOverflowing没有找到答案,我决定发布这个问题。如果我错过任何事情,请提前抱歉,但到现在为止,我很困惑。

我正在使用BeautifulSoup来解析UTF-8网站。我正在使用网站上的文字来构建一个URL以进一步抓取。我遇到了一些非英语字符问题。

例如:网站包含字符串Originální formule,我想用它来构建网址:http://blahblah.com/Originální-formulehttp://blahblah.com/origin%C3%A1ln%C3%AD-formule。问题是,我得到http://blahblah.com/Origin\xe1ln\xed-formule,这会产生错误。我试图编码,解码和什么不,但我仍然无法获得正确的URL。

BTW,当我print u'Origin\xe1ln\xed-formule'时,字符串打印得很好。它只是编码不成功。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

为了实现您的期望,您必须执行以下操作:

  1. 分解网址
  2. 获取路径部分并将其编码为utf-8
  3. 引用路径
  4. 加入每个部分以获取引用的网址
  5. 您可以结合使用以下功能执行这些操作:

    • urlparse.urlparsedocs
    • urllib.quotedocs
    • urlparse.unparsedocs

    代码最终会像这样:

    from urlparse import urlparse, urlunparse
    from urllib import quote
    x = u'http://blahblah.com/Originální-formule'
    parsed_url = list(urlparse(x.encode('utf-8')))
    parsed_url[2] = quote(parsed_url[2])
    urlunparse(parsed_url)
    

    结果:http://blahblah.com/Origin%C3%A1ln%C3%AD-formule