结论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); } }