首页 > 代码库 > Java IO流 序列列一:字符编码

Java IO流 序列列一:字符编码

1. 字符编码

先来看一下不同的字符编码

String s = "爪哇ABC";

1.1 utf-8编码

utf8编码:中文占用3个字节,英文占用1个字节

byte[] bytes = s.getBytes("utf-8");

         for(byte b : bytes){

         //把字节(转换成了int)以16字节的方式显示

         System.out.print(Integer.toHexString(b & 0xff) + ");

     }

     System.out.println();//换行

     输出:e6  85  95  e8  af  be  41  42  43

1.2 gbk编码

gbk编码:中文占用2个字节,英文占用1个字节

byte[] bytes2 = s.getBytes("gbk");

     for (byte b : bytes2) {

         System.out.print(Integer.toHexString(b & 0xff) + " );

     }

     System.out.println();

     输出:c4  bd  bf  ce  41  42  43

1.3 utf-16be编码

utf-16be编码是Java的编码格式,中文占用2个字节,英文中文占用2个字节

byte[] bytes3 = s.getBytes("utf-16be");

     for (byte b : bytes3) {

         System.out.print(Integer.toHexString(b & 0xff) + ");

     }

     System.out.println();

     输出:61  55  8b  fe  0  41  0  42  0  43

1.4 乱码问题

造成乱码问题的原因很简单,是因为编解码采用的字符编码不一致造成的。如:上面的bytes3字节数据是utf-16be格式的字节序列,如果解码的时候用utf-8的话,就会出现乱码。

String str1 = new String(bytes3);

     System.out.println(str1);

     输出:aU??

如何解决乱码问题呢? 方法也很简单,就是让编解码采用的字符编码一致即可。

String str2 = new String(bytes3, "utf-16be");

     System.out.println(str2);

1.5 文本文件

      * 文本文件就是字节序列,可以是任意编码的字节序列

      * 如果在中文机器上创建文本文件,那么该文本文件只认识ANSI编码

Java IO流 序列列一:字符编码