中文乱码的原因及解决方法
2015-10-19 15:33
429 查看
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);4、客户端与Tomcat之间产生的中文乱码
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);
所以需要将ISO8859-1产生的中文乱码进行编码再解码。
即:new Stirng(b.getBytes("iso8859-1","gbk"));
若采用的是UTF-8编码,
new String(b.getBytes("iso8859-1"),"utf-8");
以上是今天学到的一些内容之前在做网站时,一直会出现这些中文乱码的问题,尽管一些问题解决了,但是不了解这些问题的原因,今天在这里总结一下这些内容。自己能够进一步的了解,也希望对大家起到作用。
相关文章推荐
- Linux下修改MySQL编码的方法
- cmd模式下中文乱码的解决方法(注册表)
- 解决mysql5中文乱码问题的方法
- EBS xml publisher中文乱码问题及解决办法
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8)
- php url地址栏传中文乱码解决方法集合
- 常见php与mysql中文乱码问题解决办法
- UTF-8、Unicode 标准化表单、BOM
- 网站开发防止中文乱码需要了解的codepage的重要性小结
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页
- ASP+FSO生成的网页文件默认编码格式以及转换成UTF-8编码方法
- php中json_encode UTF-8中文乱码的更好解决方法
- js escape,unescape解决中文乱码问题的方法
- js url传值中文乱码之解决之道
- JQuery异步获取返回值中文乱码的解决方法
- php utf-8转unicode的函数第1/2页
- JSP中文乱码常见3个例子及其解决方法
- 如何解决JQuery ajaxSubmit提交中文乱码
- SpringMVC @RequestParam 中文乱码问题解决