zoukankan      html  css  js  c++  java
  • tomcat乱码原因--基本的编码问题

    tomcat乱码原因:在学习servlet时候,经常会遇到中文乱码的问题,网上查只知道如何设置不乱码,其中的原理不是很明白。我认为明白其中的原理,乱码问题就很容易解决

    tomcat乱码解决方法:

    post请求:

    request.setCharacterEncoding("utf-8");

    如果不想每个请求方法里都写就写一个filter过滤器

    get请求:

    1.修改tomcat中的server.xml文件

    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" redirectPort="8443" acceptCount="100"
        connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='UTF-8' />

    2.获得参数是通过new String()方法

    String name = request.getParameter("name");
    name = new String(name.getBytes("iso-8859-1"),"utf-8");

    问题:tomcat对于get请求使用了ISO-8859-1编码,对post请求默认使用你设置的编码,没有设置就使用默认ISO-8859-1编码。

    对post请求设置编码就不会乱码,原理是使用utf-8编码,使用utf-8解码,不使用utf-8解码就会出错如下:

    String s = new String("你好".getBytes(),"utf-8");
    System.out.println(new String(s.getBytes(),"iso-8859-1"));
    String s1 = new String(s.getBytes(),"utf-8");
    System.out.println(s1);

    结果:你好

         你好

    get请求浏览器的编码为utf-8,然而tomcat使用ISO-8859-1进行解码就会乱码,为什么这样可以解决乱码,

    是因为ISO-8859-1编码是单字节编码,所以使用s1.getBytes("iso-8859-1")得到的直接数组和之前没有被解码时一样,

    所以在使用utf-8就和上面的post一样,只是编码,解码

    并不是所有的乱码都可以使用这种方式,只是因为ISO-8859-1编码是单字节编码,获得其字节数组是没有变的,

    因为不同的编码对应的字节数是不一样的

    String s = new String("你好".getBytes(),"utf-8");
    System.out.println(Arrays.toString(s.getBytes()));
    //相当于tomcat帮助解码(实际对于开发者又编码一次,所以后面要先获得iso-8859-1编码的字节数组,再转成utf-8编码)
    String s1 = new String(s.getBytes(),"iso-8859-1");
    //打印iso-8859-1编码的字节数据,与解码前的字节数组比较,发现一样,所以以utf-8编码解码不会乱码
    System.out.println(Arrays.toString(s1.getBytes("iso-8859-1")));
    String s2 = new String(s1.getBytes("iso-8859-1"),"utf-8");
    System.out.println(s2);

    结果:

    [-28, -67, -96, -27, -91, -67]
    [-28, -67, -96, -27, -91, -67]
    你好

  • 相关阅读:
    C# WPF全局捕获异常 防止程序崩溃闪退
    mysql数据库动态创建分区
    mysql增加修改主键_mysql怎么修改添加主键
    C#中@的用法总结(转)
    python OpenCV使用
    turtle --- 海龟绘图¶
    Python 常用趣味模块
    Eclipse中Ant的使用
    Eclipse中Ant的使用
    Thinking in java(五)
  • 原文地址:https://www.cnblogs.com/chenxiaocai/p/5420767.html
Copyright © 2011-2022 走看看