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

中文乱码的原因及解决方法1 我们常用的编码表 ASCLL 美国标准信息交换码 gt 用一个字节的 7 位可以表示 ISO8859 1 拉丁码表 欧洲码表 gt 用一个字节的 8 位来表示 GB2312 中国的中文编码表 GBK 中国的中文编码表的升级 gt 一个汉字用两个字节表示

大家好,我是讯享网,很高兴认识大家。

1、我们常用的编码表:

  ASCLL:美国标准信息交换码

     --->用一个字节的7位可以表示

ISO8859-1:拉丁码表、欧洲码表

    --->用一个字节的8位来表示

GB2312:中国的中文编码表

GBK:中国的中文编码表的升级。

      --->一个汉字用两个字节表示,每个字节的高位是1,所以汉字的byte形式是负数。

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);

讯享网


讯享网

系统默认的编码是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);

       由上面可以看出来:一个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);

一个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之间产生的中文乱码

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

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

若采用的是UTF-8编码,

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

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




小讯
上一篇 2025-03-10 07:45
下一篇 2025-02-28 10:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17139.html