0. 参考

【整理】关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode)

python3中的urlopen对于中文url是如何处理的?

中文URL的编码问题

1. rfc1738

2.1. The main parts of URLs

   A full BNF description of the URL syntax is given in Section 5.

   In general, URLs are written as follows:

       <scheme>:<scheme-specific-part>

   A URL contains the name of the scheme being used (<scheme>) followed
by a colon and then a string (the <scheme-specific-part>) whose
interpretation depends on the scheme. Scheme names consist of a sequence of characters. The lower case
letters "a"--"z", digits, and the characters plus ("+"), period
("."), and hyphen ("-") are allowed. For resiliency, programs
interpreting URLs should treat upper case letters as equivalent to
lower case in scheme names (e.g., allow "HTTP" as well as "http"). 注意字母不区分大小写

2. python2

2.1

 >>> import urllib
>>> url = 'http://web page.com'
>>> url_en = urllib.quote(url) #空格编码为“%20”
>>> url_plus = urllib.quote_plus(url) #空格编码为“+”
>>> url_en_twice = urllib.quote(url_en)
>>> url
'http://web page.com'
>>> url_en
'http%3A//web%20page.com'
>>> url_plus
'http%3A%2F%2Fweb+page.com'
>>> url_en_twice
'http%253A//web%2520page.com' #出现%25说明是二次编码
#相应解码
>>> urllib.unquote(url_en)
'http://web page.com'
>>> urllib.unquote_plus(url_plus)
'http://web page.com'

2.2 URL含有中文

 >>> import urllib
>>> url_zh = u'http://movie.douban.com/tag/美国'
>>> url_zh_en = urllib.quote(url_zh.encode('utf-8')) #参数为string
>>> url_zh_en
'http%3A//movie.douban.com/tag/%E7%BE%8E%E5%9B%BD'
>>> print urllib.unquote(url_zh_en).decode('utf-8')
http://movie.douban.com/tag/美国

3. python3

3.1

 >>> import urllib
>>> url = 'http://web page.com'
>>> url_en = urllib.parse.quote(url) #注意是urllib.parse.quote
>>> url_plus = urllib.parse.quote_plus(url)
>>> url_en
'http%3A//web%20page.com'
>>> url_plus
'http%3A%2F%2Fweb+page.com'
>>> urllib.parse.unquote(url_en)
'http://web page.com'
>>> urllib.parse.unquote_plus(url_plus)
'http://web page.com'

3.2 URl含中文

 >>> import urllib
>>> url_zh = 'http://movie.douban.com/tag/美国'
>>> url_zh_en = urllib.parse.quote(url_zh)
>>> url_zh_en
'http%3A//movie.douban.com/tag/%E7%BE%8E%E5%9B%BD'
>>> urllib.parse.unquote(url_zh_en)
'http://movie.douban.com/tag/美国'

4. 其他

 >>> help(urllib.urlencode)
Help on function urlencode in module urllib: urlencode(query, doseq=0)
Encode a sequence of two-element tuples or dictionary into a URL query string. If any values in the query arg are sequences and doseq is true, each
sequence element is converted to a separate parameter. If the query arg is a sequence of two-element tuples, the order of the
parameters in the output will match the order of parameters in the
input. >>>

URL地址编码和解码的更多相关文章

  1. url在线编码和解码

    在工作中,经常遇到encode之后的url.想查看里面的某个参数的时候,很不直观.今天在网上搜了一下对url在线编码和解码的网站.对我来说,使用起来很方便.而且这个网站里面,不仅仅有对url的编码和解 ...

  2. URL的编码和解码

    URL的编码和解码 参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集 也就是说URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和 ...

  3. .NET Core中如何对Url进行编码和解码

    我们在.NET Core项目中,可以用WebUtility类对Url进行编码和解码,首先我们要确保项目中引入了nuget包:System.Runtime.Extensions 当然这个nuget包默认 ...

  4. java中URL 的编码和解码函数

    java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...

  5. javascript对url进行编码和解码

    这里总结下JavaScript对URL进行编码和解码的三个方法. 为什么要对URL进行编码和解码 只有[0-9[a-Z] $ - _ . + ! * ' ( ) ,]以及某些保留字,才能不经过编码直接 ...

  6. 在线url网址编码、解码

    >>在线url网址编码.解码<<

  7. i春秋url地址编码问题

    i春秋学院是国内比较知名的安全培训平台,前段时间看了下网站,顺便手工简单测试常见的XSS,发现网站搜索功能比较有意思. 其实是对用户输入的内容HTML编码和URL编码的处理方式在这里不合理,提交到乌云 ...

  8. JavaScript对浏览器的URL进行编码、解码

    关于url编码,js有三个函数.有三个解码方法,escape,encodeURI,encodeURIComponent().有三个解码方法,unescapse,decodeURI,decodeURIC ...

  9. JS对url进行编码和解码(三种方式区别)

    Javascript语言用于编码的函数,一共有三个,最古老的一个就是escape().虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起. escape 和 ...

随机推荐

  1. ubuntu Qt linuxdeployqt打包

    1.下载PatchELF 0.9.,https://nixos.org/patchelf.html 安装:./configure make sudo make install 2.终端命令设置设置环境 ...

  2. 设计模式--观察者模式Observer(对象行为型)

    一.观察者模式 观察者模式是在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多. ...

  3. I/O 模型

    5种I/O模型的基本区别: 阻塞式I/O 非阻塞式I/O I/O复用 信号异步模型 异步I/O 1. 阻塞 I/O 最流行的I/O模型是阻塞I/O模型,缺省情形下,所有套接口都是阻塞的.我们以数据报套 ...

  4. Netflix正式开源其API网关Zuul 2

    5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相当多的微服务组件(详见 ...

  5. EasyUI 如何结合JS导出Excel文件

    出处:http://blog.csdn.net/jumtre/article/details/41119991 EasyUI 如何结合JS导出Excel文件 分类: 技术 Javascript jQu ...

  6. 银联支付Java开发

    注:原来来源于: <  银联支付Java开发  > 银联的demo写的不错,基本上可以直接使用. 首先是对acp_sdk.properties的内容修改,注意这个文件的文件名不能进行修改. ...

  7. Confluence 6 整合到支持的附件存储选项

    如果你现在正在存储附件到 WebDav 或者你的数据库中.你可以整合附件的存储到文件系统中.当你的附件从数据库中被合并到文件系统后,你存储在数据库中的附件数据就可以从数据库中删除了. 当附件合并进行的 ...

  8. 自定义你的 Confluence 6 站点

    本部分对 Confluence 全站进行自定义的相关内容进行了说明.这部分只能是具有 Confluence 的管理员权限的用户才能进行操作 —— 系统管理员或者 Confluence 管理员. 有关对 ...

  9. MySQL数据库驱动jar包

    地址:https://www.mysql.com/

  10. extra过滤

    extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些 ...