您的位置:首页 > 编程语言 > Java开发

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

2014-11-09 14:48 155 查看

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编码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐