zoukankan      html  css  js  c++  java
  • Python urllib2.urlopen打开中文url的编码处理_Luffy's Space_百度空间

    Python urllib2.urlopen打开中文url的编码处理_Luffy's Space_百度空间

    Python urllib2.urlopen打开中文url的编码处理
    2010-03-06 15:49

    参考文章:http://lijiang.javaeye.com/blog/312247

    在用urllib2.urlopen(url)时,如果url里面包含中文,则必须对此url进行编码处理,否则会引起UnicodeError。

    搜索后找到了相关的处理方法

    引用参考文章的:

    当处理HTTP链接的时候,链接如果有中文的话,那么发起HTTP链接的时候,一定要先把URL编码,否则就会出现问题。

    而在python中,用 urllib2.quote(URL)进入编码和urllib2.unquote(URL) 解码的时候,有一点需要注意:

    就是URL字符串不能是 unicode编码,此时必须把URL编码转换成适当的编码,如utf-8或gb2312等。

    而python处理编码转换的机制如下:原来编码>>内部编码>>目的编码

    python的内部编码是使用unicode来处理的

    >>>gb=”中国” #此处为原本gb2312编码

    >>>uni=unicode(gb,'gb2312') #把gb2312编码转换成unicode的内部编码

    >>>utf=uni.encode('utf-8') #把unicode编码转换成utf-8目的编码

    因为中文在URL中进行了url quote处理的,例如:

    http://***.com/newsearch/books/?query=你好

    实际上的URL是:

    http://***.com/newsearch/books/?query=%C4%E3%BA%C3

    因此在将url传给urlopen之前,应该对url进行unquote

    python 文档中对unqoute的描述为:

    Replace %xx escapes by their single-character equivalent.

    Example: unquote(‘/%7Econnolly/’) yields ‘/~connolly/’.

    综上所述,对url先进行编码上的转换,然后再用unquote处理,就能得到可获取的url了。

    我的代码如下:

    query=request.GET['query']

    url='http://***.com/search/api/books/q=' + query

    url=url.encode('utf-8')

    url=urllib2.unquote(url)

    data=urllib2.urlopen(url)

  • 相关阅读:
    javascript-事件
    javascript-数组简单的认识
    javascript-dom操作
    JavaScript入门
    python语言程序设计?
    4,14
    python第二周。2019.4.13
    python第二周
    python语言程序设计9
    python语言程序设计8
  • 原文地址:https://www.cnblogs.com/lexus/p/2405214.html
Copyright © 2011-2022 走看看