我传递之后发现长度变长了!!!
发现,应该在传输时,杜绝字符,使用字节最为合适,特别是因为我们使用的Tomcat容器,其底层是ISO8859-1的单字节编码,而我们中文环境下使用的是UTF-8的多字节编码;
所以当我把加密后的字符内容放到jsp中的hidden input内时,发现首尾都多出了几个空格?并且长度在trim了空格,之后依旧变长了;
同时也复习一个问题:
在servlet中获取用户参数数据:
request.getParameter("参数名")遇到参数中出现中文乱码的时候;
POST提交:
request.setCharacterEncoding("utf-8");
get提交:
手动解码:
name = new String(name.getBytes("ISO-8859-1"), "utf-8"); // 测试setCharacterEncoding同样可以
Tomcat默认的编码是ISO8859-1,但是我们此项目使用的是UTF8,所以接收的时候会出现乱码;
因为在ISO8859-1,和UTF8等等编码中英文和数字,都是单字节编码,上面讲了:所以英文和数字
不会出现乱码,但是中文就很惨了;
所以我们要将得到的乱码进行ISO-8859-1进行解码,转化为字符流,再重新通过utf-8进行转化!
(因为我们在进行get方式提交之前,就是utf-8的编码,但是Tomcat又通过了ISO8859-1进行编码)
而我在做文件下载(下载一张图片的案例的时候):
File file = new File("e:/图片.png");// 中文的图片名的话,必须这样进行包装 先通过GBK进行getBytes,然后通过设置新的ISO8859_1
response.setHeader("content-disposition","attachment;filename="+new String(file.getName().getBytes("GBK"),"ISO8859_1"));
又是先通过GBK得到字符流,然后再通过ISO8859-1进行编码了呢?
因为我们是在Tomcat容器中进行下载,最近进行译码操作的也是Tomcat容器,所以使用ISO8859-1进行编码;
那为什么通过GBK进行获取流呢?我们不是工作空间为UTF-8吗?因为我们当前是在Windows环境下,Windows环境下
默认的是gb2312,然而gb2312属于GBK组。
究其原理:不管是什么字符,传输都要进行编码和解码,通过一种编码格式进行编码后,就要通过对应的方式进行解码(getBytes),在转化为中间状态,字节流的时候,就可以通过任何一种编码格式进行编码了,同上的new String,指定一种编码进行重新构造!
我们要了解在http协议中POST和GET两个命令的区别(参照百度):
1.get是从服务器上获取数据,post是向服务器传输数据;(这个暂时没有什么感触)
2.get是把参数数据加到URL中,值和表单一一对应在URL中可以看到;post通过HTTP post机制,
把各个字段和 HTML HEADER一起传送,用户看不到!
3.get用于URL传值,post用于form传值。
4.get传输的数据量小,不能大于2KB。post传输大,大家都讲大小没有限制,其实理论上讲还是有限制的但是大到足够传输。
5.最后就是大家都知道的,POST安全性高,GET安全性低。但是安全性低的往往执行效率会高一些GET就是如此。(Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post)
Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。ISO向下兼容ASCII。