中文乱码的原因及解决方法

简介: 中文乱码的原因及解决方法

1、我们常用的编码表:

ASCLL:美国标准信息交换码


image.png


Unicode:国际标准码,融合了多种文字。


UTF-8:最多用三个字节表示一个字符


2、编码表的编码和解码步骤:


2.1先来了解下编码和解码的概念


编码:字符串变成字节数组


解码:字节数组变成字符串


即:


编码:String–>byte数组,str.getBytes();


解码:byte–>String


2.2 GBK编码的转换流程


String str = "上海";
    byte[] b = str.getBytes();
    System.out.println(Arrays.toString(b));
    String s = new String(b,"gbk");
    System.out.println(s);


image.png


系统默认的编码是gbk编码,当调用getBytes()方法之后,“上海”二字转换成长度为4的字节数组,这里是编码的过程。


当new String(b,“gbk”)时,用的是gbk的解码方式。所以能够解析出相应的汉字。若使用utf-8,那么就会出现中文乱码。


因此,解决中文来乱码的关键点 在于编码表的对应。


演示编码不一致产生的中文乱码问题:


String str = "上海";
    byte[] b = str.getBytes("utf-8");
    System.out.println("汉字:"+str+"utf-8编码形式:"+Arrays.toString(b));
    String s = new String(b,"gbk");
    System.out.println("与之对应的gbk解码形式:"+s);


image.png


由上面可以看出来:一个utf-8编码方式的汉字占用3个字节,而gbk编码方式占用2个字节。

3、产生ISO8859-1的中文乱码的解决方法:

产生问题:


String str = "上海";
    byte[] b = str.getBytes();
    System.out.println("汉字:"+str+"gbk编码形式:"+Arrays.toString(b));
    String s = new String(b,"iso8859-1");
    System.out.println("与之对应的iso8859-1解码形式:"+s);


image.png


一个ISO8859-1编码占用一个字节。

解决方法:将乱码按照iso8859-1的编码格式重新编码,产生的编码还是那些字节数组[-55,-49,-70,-93],然后将这些字节数组按照GBK编码进行解码。

代码如下:


String str = "上海";
    byte[] b = str.getBytes();
    System.out.println("汉字:"+str+"gbk编码形式:"+Arrays.toString(b));
    String s = new String(b,"iso8859-1");
    System.out.println("与之对应的iso8859-1解码形式:"+s);
    byte[] b1 = s.getBytes("iso8859-1");
    System.out.println(s+"与之对应的iso8859-1编码形式:"Arrays.toString(b1));
    String s1 = new String(b1,"gbk");
    System.out.println(s1);


4、客户端与Tomcat之间产生的中文乱码


image.png


所以需要将ISO8859-1产生的中文乱码进行编码再解码。


即:new Stirng(b.getBytes(“iso8859-1”,“gbk”));


若采用的是UTF-8编码,


new String(b.getBytes(“iso8859-1”),“utf-8”);


以上是今天学到的一些内容之前在做网站时,一直会出现这些中文乱码的问题,尽管一些问题解决了,但是不了解这些问题的原因,今天在这里总结一下这些内容。自己能够进一步的了解,也希望对大家起到作用。


目录
相关文章
|
Java
【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
2246 0
【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
|
6月前
|
编解码 JavaScript 编译器
[字符编码] 实战篇:QT中文乱码的解决办法
[字符编码] 实战篇:QT中文乱码的解决办法
1993 0
Pycharm 中文乱码解决,统一设置 UTF-8,再也不会乱码了
Pycharm 中文乱码解决,统一设置 UTF-8,再也不会乱码了
Pycharm 中文乱码解决,统一设置 UTF-8,再也不会乱码了
JAVAWEB 输出中文乱码??的解决方法
1.问题描述 JAVAWEB程序中,使用String输出中文,浏览器产生了乱码格式:
158 1
JAVAWEB 输出中文乱码??的解决方法
|
Windows
phpexcel导出数据乱码错误的解决方法
phpexcel导出数据乱码错误的解决方法
256 0
QT5 中文乱码的解决方法。
QT5 中文乱码的解决方法。
150 0
QT5 中文乱码的解决方法。
Qt5显示中文乱码的解决方法
Qt5显示中文乱码的解决方法
603 0
Qt5显示中文乱码的解决方法
|
关系型数据库 MySQL 数据库