文件的编码

来源:互联网 发布:游民星空mac游戏 编辑:程序博客网 时间:2024/04/30 11:28

新建3个txt文件,内容分别为联通、联想、联,再次分别打开三个文件,会发现联通、联乱码,联想没有乱码。诡异!

package com.imooc.io;import java.io.UnsupportedEncodingException;public class EncodeDemo {public static void main(String[] args) throws UnsupportedEncodingException {String str = "李程lch";byte[] bytes1 = str.getBytes(); // 转换成字节序列用的是项目默认的编码utf-8for (byte b : bytes1) {// 把字节(转换成了int)以16进制的方式显示System.out.print(Integer.toHexString(b & 0xff) + "  ");}// 结论:utf-8编码中文占用3个字节,英文占用1个字节System.out.println();byte[] bytes2 = str.getBytes("gbk"); // 转换成字节序列将编码设置为gbkfor (byte b : bytes2) {// 把字节(转换成了int)以16进制的方式显示System.out.print(Integer.toHexString(b & 0xff) + "  ");}// 结论:gbk编码中文占用2个字节,英文占用1个字节System.out.println();// java是双字节编码utf-16bebyte[] bytes3 = str.getBytes("utf-16be"); // 转换成字节序列将编码设置为utf-16befor (byte b : bytes3) {// 把字节(转换成了int)以16进制的方式显示System.out.print(Integer.toHexString(b & 0xff) + "  ");}// 结论:utf-16be编码中文和英文君占用2个字节System.out.println();/* * 当你的字节序列式某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码 */String str1 = new String(bytes3); // 用项目默认编码utf-8System.out.println(str1); // 乱码String str2 = new String(bytes3,"utf-16be"); // 使用序列化时的编码System.out.println(str2); // 正常String str3 = new String(bytes3,"gbk"); // 使用序列化时的编码System.out.println(str3); // 乱码/* * 文本文件 就是字节序列 * 可以使任意编码 * 如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码 * 联通、联这是一种巧合,他们正好符合了utf-8编码的规则。 */}}

运行结果:

 

0 0