首页 > 代码库 > 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流 序列列一:字符编码