坑爹的对GBK编码的字符进行url编码
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编码的更多相关文章
- html-----013----实体字符/HTML URL 编码
<!DOCTYPE> 声明 版本 年份 HTML 1991 HTML+ 1993 HTML 2.0 1995 HTML 3.2 1997 HTML 4.01 1999 XHTML 1.0 ...
- 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 ...
- BASE64编码的字符进行URL传输丢失特殊字符的问题
因为BASE64的编码里含有“+”号等特殊字符,在url传输的时候会把+号编程空格,解决这个问题的方法: 请求时把BASE64编码进行url的编码再进行传输 接收时把BASE64编码进行url的解码 ...
- url 编码(percentcode 百分号编码)(转载)
原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html http://www.imkevinyang.com/2009 ...
- 详解JavaScript中的Url编码/解码,表单提交中网址编码
本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...
- 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% ...
- 为什么要进行URL编码
我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割.如"?name1=value1&a ...
- Javascript中的url编码与解码(详解)
摘要 本文主要针对URI编解码的相关问题做了介绍,对url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript中和编解码相关的几对函数escape / unescap ...
- 小白袍 -- Chapter 1.4.1.1 URL编码的理论解读
1.4.1.1 URL编码的理论解读 我们在做JavaWeb时避不过GET请求,GET请求和POST请求最大一点不同就在于参数,GET请求的参数会URL中,而POST请求的参数则会在HTTP Hea ...
随机推荐
- 没有必要去指定SqlSessionFactory或SqlSessionTemplate
<!-- 自动注册mybatis mapper bean --><!-- 注意,没有必要去指定SqlSessionFactory或SqlSessionTemplate, 因为 ...
- 优化Linux生产服务器的经验之谈
[51CTO独家特稿]如何优化自己的Linux生产服务器?本文结合实际的工作经验,总结了优化Linux生产服务器的九大要点.如果有些方法您尚未采用,不妨一试. 一.时间同步 生产环境下的服务器对时间的 ...
- SUSE Linux Enterprise Server 设置IP地址、网关、DNS
说明: ip:192.168.21.172 子网掩码:255.255.255.0 网关:192.168.21.2 dns:8.8.8.8 8.8.4.4 1.设置ip地址 vi /etc/syscon ...
- Cheatsheet: 2014 01.15 ~ 01.30
Web How to upload file in Node.js Create Echo Server in Node.js Near-Realtime Analytics with MongoDB ...
- 最大似然估计(MLE)与最小二乘估计(LSE)的区别
最大似然估计与最小二乘估计的区别 标签(空格分隔): 概率论与数理统计 最小二乘估计 对于最小二乘估计来说,最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值与观测值之差的平方和最小. ...
- Formatting Excel File Using Ole2 In Oracle Forms
Below is the some useful commands of Ole2 to format excel file in Oracle Forms.-- Change font size a ...
- c#扩展方法的理解(二:接口)
namespace ExtensionInterfaceMethod { class Program { static void Main(string[] args) { //使用接口变量来调用扩展 ...
- zoj 1081 判断点在多边形内
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- iOS - UIScrollView
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding> @available(iOS 2.0, ...