坑爹的对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 ...
随机推荐
- grails的layouts模板页面使用
使用方式1: layouts文件夹下新建文件,名称和Controller名称相同,例如UserController,layouts下面创建user.gsp,此时,user站点下所有的页面都将套用 us ...
- 解决Duilib创建的win32窗口拖到屏幕上边缘自动最大化
转载:http://bbs.csdn.net/topics/390842294 使用Duilib创建窗口的时候,假如有这样一个需求: 1.窗口大小规定 2.不可拖拽改变窗口大小 3.双击标题栏禁止最大 ...
- 不同分辨率的LCM进行兼容
1.读取不同LCM ID的时序不同,如何处理? 2.开机后android会自动resize图片资源的大小,但开机logo无法自行resize,如何操作?保证识别到不同分辨率的LCM后开机logo可以正 ...
- windows tomcat 优化
windows tomcat 优化 1. tomcat conf server.xml 在server.xml中修改以一部分,增加节点数目,可以很好的提高性能: <Connector port ...
- [c/c++]linux下使用c/c++操作mysql
首先需要安装相应的库文件,直接apt-get就可以. sudo apt-get install libmysqlclient-dev 编译的时候,需要额外链接到这个库.如果是apt-get安装的话,那 ...
- CUBRID学习笔记 21 查看主键外键索引
命令 show create table game; game是表名 在web管理中,请在sql标签中查,不要在query中执行. show create table game; === <Re ...
- iOS - UIImagePickerController
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImagePickerController : UINavigationController <NSCod ...
- SAP屠夫---折旧在13-16调整期间的烦恼(转)
"应尽量避免在13-16期的折旧行为",在去年新准则ERP调整时就强调过,实际上, 有的企业并不使用13-16期间, 假设某家企业将折旧折在13期, 非常可惜的是,sap的折旧费用 ...
- jquery input选择弹框
index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...