其他分享
首页 > 其他分享> > tomcat7 乱码 为什么这样解决 编码本质 几行代码 深入理解

tomcat7 乱码 为什么这样解决 编码本质 几行代码 深入理解

作者:互联网

package com.neil.note;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Practice {

    public static void main(String[] args) {
        try {
            String s="小白";
            //浏览器请求参数 转化为字符集数组
            byte[] utf_8bytes=s.getBytes("utf-8");//
            //字符数组转为二进制字符集 传到tomcat服务器 字符集数组
            System.out.println("utf8\"小白\"的字符集数组"+Arrays.toString(utf_8bytes));// [-27, -80, -113, -25, -103, -67]

            //tomcat 再使用iso8859-1把utf8的字符集解码(这里应该是先将字符集编码为ISO8859-1,再解出)
            //因为和utf8 解出的标准不同,所以就乱码啦。
            // 每一个终端的本质都是将二进制流 先编码 再解码  才能变成认类理解的文字,图像,视频
            String tomcatdisplay=new String(utf_8bytes, "ISO-8859-1");//å°ç½
            /**此时字符串已是一个字符编码为iso8859-1的字符串了,显示是上面的一串乱码;
            获取这串乱码的编码字符集 (这里的getBytes里的方法写调用的是encode)就是把它编回原来的样子,字符集数组可以按照编码方式编成字符,同样
            字符也可以按照相同的编码方式编回成字符集数组,可逆的 一对一。
             */
            byte iso_bytes[] = tomcatdisplay.getBytes("ISO-8859-1");
            System.out.println("iso8859-1\"乱码\"的字符数集组"+Arrays.toString(iso_bytes));//[-27, -80, -113, -25, -103, -67]
            String normalStr = new String(iso_bytes,"utf-8");
            System.out.println(normalStr);//小白
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            /**
             * 下次乱码莫慌   本质上就是二进制流的传递  二进制流正确 总有一个解码是正确的
             */
        }

    }



}

请看我的代码注释 ,演示很明确。

标签:tomcat7,utf,String,编码,字符集,几行,乱码,数组
来源: https://blog.csdn.net/AaronSwarts/article/details/122636261