java io之编码

结论1:

utf-8 中文占3个字节,英文占1个字节,数字占1个字节

gbk 中文占2个字节,英文占1个字节,数字占1个字节

utf-16be 中文占2个字节,英文占2个字节,数字占2个字节

java是双字节编码。不管中英阿拉伯数字,都是双字节编码。

结论2:

字节序列是使用的某编码,在字节序列转换成字符串时,就要用该编码方式

如果说在某个项目下,打开的文本文件是乱码,那拷到本机或者其他机器上,也许就不是乱码了。因为项目idea默认采用的编码方式可能和文本文件不是一种编码,但是本机或者其他机器上的编码格式也许和这个文件是相同的。反之,某个项目下,打开的文本文件是明文,但是拷到本机或者其他机器上是乱码,也是同样的道理。

结论3:

文本文件就是字节序列,可以是任意编码方式的字节序列。如果在中文机器上创建文件,那默认就是ansi编码格式的,如果在mac机器上创建文件,那默认是utf-8编码格式的。

package Demo_1_Encode;

import java.io.UnsupportedEncodingException;

class Encode {
    public static void main(String args[]) throws UnsupportedEncodingException {
        String s = "美团a4";
        byte[] bs1 = s.getBytes();//系统默认编码utf-8,中文占3个字节,英文占1个字节,数字占1个字节
        for(byte b:bs1){
            System.out.print(Integer.toHexString(b&0xff)+" ");
        }
        System.out.println();
        byte[] bs2 = s.getBytes("gbk");//中文占2个字节,英文占1个字节,数字占1个字节
        for(byte b:bs2){
            System.out.print(Integer.toHexString(b&0xff)+" ");
        }
        System.out.println();
        byte[] bs3 = s.getBytes("utf-16be");//中文占2个字节,英文占2个字节,数字占2个字节
        for(byte b:bs3){
            System.out.print(Integer.toHexString(b&0xff)+" ");
        }
        System.out.println();
        String s1 = new String(bs1,"gbk");
        System.out.println(s1);
        String s2 = new String(bs1,"utf-8");
        System.out.println(s2);
    }
}

  

java io之编码

上一篇:Java Serializable接口 (序列化)


下一篇:异步请求fetch之初体验