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();
/**
* 下次乱码莫慌 本质上就是二进制流的传递 二进制流正确 总有一个解码是正确的
*/
}
}
}
请看我的代码注释 ,演示很明确。