url编码又叫百分号编码

现在的url编码十分混乱,都没有按照新标准来

对汉字都按照不同的编码后再进行url编码

2005年1月发布的RFC 3986,强制所有新的URI必须对未保留字符不加以百分号编码;其它字符要先转换为UTF-8字节序列,

然后对其字节值使用百分号编码。此前的URI不受此标准的影响。

假如大家都按照这个标准来进行url编码,就不会出现各种乱码的问题了。

现在来说说自己的苦恼:

url编码标准规定,对于那些不安全字符(保留字符,不可打印字符)需要进行编码,编码的格式是%xx,就是百分号后面加上两个16进制的字符。

对于汉字都是先转成特定编码格式如何gbk或者utf8格式。大家都知道gbk和utf8分别都是按照两个字节和3个字节来表示汉字。

所以大家看到对gbk编码格式的汉字的url编码大部分是%xx%xx,而utf8格式的url编码都是%xx%xx%xx

说到这里就郁闷了。。。。

有些服务器或者转码工具对与有些gbk编码格式的字符的url编码都不按照标准来,本来是%xx%xx形式的url格式,硬是要变成%xxx格式。

可怜的java.net.urldecoder类,不支持对%xxx这种url格式的解码。所以出现了乱码。

哎,出现了乱码,测试人员就要来找你了,快解bug。尼玛啊,编码问题,最头疼啊。。。

马上就谷歌和百度了一把,哎,都没有对我有实质性用处的东西啊。

一气之下,决定,自己去研究gbk编码标准规范,看看gbk汉字内码字库,研究研究上述%xxx格式出现的规律。

发现gbk字符有一字节和双字节编码,00–7F范围内是一位,和ASCII保持一致,此范围内严格上说有96个文字和32个控制符号。
之后的双字节中,前一字节是双字节的第一位。总体上说第一字节的范围是81–FE(也就是不含80和FF),

第二字节的一部分领域在40–7E,其他领域在80–FE。

对比字库发现,只要第二个字节在41-5a和61-7a都会在url编码中替换assii码表字母的形式。例如汉字“汚”gbk编码为9B41

而它的url编码变成了%9BA。

哎,哥们,你为啥要变成这样,感觉很多余啊,难道为了压缩网络传输的字节数,难道为了消除歧义(这个我看不出有啥歧义),

希望有机会能听大神解释一下,为啥要变成这样啊。。。

个人感觉变成这样,编码就对大小写敏感了。。

这里呼吁一下:希望以后都按标准来,要不然会坑死程序员,程序员伤不起。。。。

坑爹的对GBK编码的字符进行url编码的更多相关文章

  1. html-----013----实体字符/HTML URL 编码

    <!DOCTYPE> 声明 版本 年份 HTML 1991 HTML+ 1993 HTML 2.0 1995 HTML 3.2 1997 HTML 4.01 1999 XHTML 1.0 ...

  2. Delphi编码与签名【URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384和HMAC-SHA512签名】

    作者QQ:(648437169) 点击下载➨delphi编码与签名 [Delphi编码与签名]URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1.HMAC-SHA224.HMAC ...

  3. BASE64编码的字符进行URL传输丢失特殊字符的问题

    因为BASE64的编码里含有“+”号等特殊字符,在url传输的时候会把+号编程空格,解决这个问题的方法: 请求时把BASE64编码进行url的编码再进行传输 接收时把BASE64编码进行url的解码 ...

  4. url 编码(percentcode 百分号编码)(转载)

    原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html   http://www.imkevinyang.com/2009 ...

  5. 详解JavaScript中的Url编码/解码,表单提交中网址编码

    本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...

  6. url 编码(percentcode 百分号编码)

    http://www.imkevinyang.com/2009/08/%E8%AF%A6%E8%A7%A3javascript%E4%B8%AD%E7%9A%84url%E7%BC%96%E8%A7% ...

  7. 为什么要进行URL编码

    我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割.如"?name1=value1&a ...

  8. Javascript中的url编码与解码(详解)

    摘要 本文主要针对URI编解码的相关问题做了介绍,对url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript中和编解码相关的几对函数escape / unescap ...

  9. 小白袍 -- Chapter 1.4.1.1 URL编码的理论解读

    1.4.1.1  URL编码的理论解读 我们在做JavaWeb时避不过GET请求,GET请求和POST请求最大一点不同就在于参数,GET请求的参数会URL中,而POST请求的参数则会在HTTP Hea ...

随机推荐

  1. PHP中的XML解析的5种方法

    [前言]不管是桌面软件开发,还是WEB应用,XML无处不在!然而在平时的工作中,仅仅是使用一些已经封装好的类对XML对于处理,包括生成,解析等.假期有空,于是将PHP中的几种XML解析方法总结如下: ...

  2. Mac 下Cordova开发

    一 Cordova开发环境搭建 1,安装node.js环境 官网: http://nodejs.org/  下载包安装 2,使用命令行安装 cordova 主要命令: 安装Cordova: sudo ...

  3. winfrom增删改查

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. Horizontal Toolbar With Navigational Buttons Form Sample For Oracle Forms 10g/11g

    Sharing an Oracle Form Htoolbar.fmb for Oracle Forms 10g/11g containing Horizontal Toolbar canvas an ...

  5. Windows Internals学习笔记(五)Synchronization

    参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...

  6. Zookeeper相关知识

    一.Zookeeper是什么? Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务. ...

  7. JavaScript中的加法运算

    <head runat="server"> <title>JavaScript实现加法计算器</title> <script type=& ...

  8. shell script数组使用函数输出

    #!/bin/bash # array variable to function test function testit { local newarray newarray=("$@&qu ...

  9. 个人阅读作业 The Last

    对于软件工程M1/M2的总结: 假象-MO 在团队开发的前期,我感觉自己其实给了自己很多的期待,因为一直希望着自己可以在团队中担任一个角色,用自己的力量为团队多做事情,也给了其他人一些假象,那就是看起 ...

  10. Class.asSubclass浅谈

    这是java.lang.Class中的一个方法,作用是将调用这个方法的class对象转换成由clazz参数所表示的class对象的某个子类.举例来说, 上面的代码将strList.getClass() ...