Java的编码与解码
2017, Jul 04
Java编码与解码
1.基础知识
(1)GBK编码:支持中文,中文每个字符占2字节,英文每个字符占1个字节
(2)UTF-8编码:支持中文,中文每个字符占3字节,英文每个字符占1字节
(3)ISO-8859-1编码:不支持中文,英文每个字符占1字节。
2.Java编程中的编码与解码
Java中的getBytes()函数如果不指定编码方式,我们的windows系统上一般默认是GBK编码方式。
注意:用什么方式编码,就要用什么方式解码。
编码与解码的实例分析
案例一:
String s = "好"; byte [] UTF8bytes = s.getBytes("UTF-8"); byte [] GBKbytes = s.getBytes("GBK"); byte [] ISObytes = s.getBytes("ISO-8859-1"); // 下图是对每一个字节数组进行循环输出
案例二:
String s = "好ab"; byte [] UTF8bytes = s.getBytes("UTF-8"); byte [] GBKbytes = s.getBytes("GBK"); byte [] ISObytes = s.getBytes("ISO-8859-1"); byte [] defaultbytes = s.getBytes(); // 下图是对每一个字节数组进行循环输出
案例三:
String renewS1 = new String(UTF8bytes,"UTF-8"); String renewS2 = new String(GBKbytes,"GBK"); // 下图是对这两个字符串打印输出
案例四:
String s = "好"; byte [] UTF8bytes = s.getBytes("UTF-8"); byte [] GBKbytes = s.getBytes("GBK"); byte [] ISObytes = s.getBytes("ISO-8859-1"); byte [] defaultbytes = s.getBytes(); String isoS = new String(UTF8bytes,"ISO-8859-1"); byte [] isobytes = isoS.getBytes("ISO-8859-1"); String gbkS = new String(UTF8bytes,"GBK"); byte [] gbkbytes = gbkS.getBytes("GBK"); String reNewUTFSByIso = new String(isoS.getBytes("ISO-8859-1"), "UTF-8"); String reNewUTFSByGbk = new String(gbkS.getBytes("GBK"), "UTF-8");
总结
(1)一个字符串采用同一种编码方式进行编码,然后解码是不会乱码的。
(2)一个字符串首先采用A方式编码成字节数组,其次采用B方式解码为字符串,然后采用B方式编码为字节数组,最后采用A方式解码为字符串。最终是否会乱码,主要看第三步的字节数组与第一步的字节数组相同与否。
(3)UTF-8中文占三字节,GBK中文占二字节。ISO-8859-1英文站一字节。由于UTF-8和GBK的字节数都是ISO-8859-1字节数的倍数。所以一个字符串用UTF-8编码后是可以用ISO-8859-1解码的,GBK也是如此。
(4)字符串用UTF-8编码后,用GBK解码。如果这个字符串的UTF-8编码后的字节数组与GBK不能满足字节间的倍数关系,就会乱码。