1.基本知识
- 1个byte字节=8个bit比特,数据以字节为单位存储,以bit位进行传输
- ASCII码:一个英文字母(a,A)占1个字节,一个中文汉字占2个字节,
- UTF-8码:一个英文字母或者英文标点占1个字节,一个中文汉字或中文标点占3个字节
- Unicode:一个英文字母或者英文标点、一个中文汉字或者中文标点占4个字节,(根据所有字符中单个字符占字节的最大值确定的,如果一个英文字母占不到4个字节也会分配4个字节,所有会出现浪费的情况,导致文件过大)
以下是对上面2、3、4的代码证明
System.out.println("a".getBytes("ASCII").length);//1
System.out.println("A".getBytes("ASCII").length);//1
System.out.println("中".getBytes("ASCII").length);//2
System.out.println("a".getBytes("UTF-8").length);//1
System.out.println("A".getBytes("UTF-8").length);//1
System.out.println(",".getBytes("UTF-8").length);//1
System.out.println("发".getBytes("UTF-8").length);//3
System.out.println(",".getBytes("UTF-8").length);//3
System.out.println("a".getBytes("Unicode").length);//4
System.out.println("A".getBytes("Unicode").length);//4
System.out.println(",".getBytes("Unicode").length);//4
System.out.println("发".getBytes("Unicode").length);//4
System.out.println(",".getBytes("Unicode").length);//4
2 参考 彻底弄懂Unicode编码
3.字节到二进制转换,符合ASCII编码的规定,UTF8对ASCII码兼容,故同样适合,大部分编码集都对ASCII码兼容
byte[] bys = "2".getBytes();//存储在文件中的字节,参数为UTF-8/ASCII,结果相同
System.out.println(Arrays.toString(bys));
System.out.println(new BigInteger(1, bys).toString(10));//字节到10进制
System.out.println(new BigInteger(1, bys).toString(2));//字节到2进制