zoukankan      html  css  js  c++  java
  • 在做银行支付接口案例的时候,遇到的编码问题!

        之前遇到的在加密运算的时候,传输涉及到字符,但是因为转化,其中还是有部分加密码是由汉字转化来的,但是传输中出现了问题,发现不应该用字符传输,而是应该转化成字节流再进行传输,其中就是因为ISO8859-1和UTF-8的原因;

    我传递之后发现长度变长了!!!

    发现,应该在传输时,杜绝字符,使用字节最为合适,特别是因为我们使用的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。


  • 相关阅读:
    The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法
    Intellij Idea14 jstl标签的引入
    17个短视频渠道分成收益全解析
    chrome浏览器插件推荐——Vimium 篇
    从Java代码到字节码(1)
    Java跳出循环-break和continue语句
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
    XML文件解析
    jpa基于按annotation的hibernate主键生成策略
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053506.html
Copyright © 2011-2022 走看看