文本文件就是字节序列,可以是任意编码的字节序列。
- gbk编码中文占2个字节,英文占1个字节
- utf-8 中文占3个字节,英文占1个字节
在UTF-8中,一个汉字为什么需要三个字节?这篇短文对utf-8说的很清楚了。 - Java是双字节编码utf-16be, 中文占用2字节,英文占用2字节
public class EncodeDemo {
public static void main(String[] args) throws Exception {
String s = "编码ABC";
// gbk编码中文占2个字节,英文占1个字节
byte[] bytes1 = s.getBytes();
for (byte b : bytes1) {
System.out.print(Integer.toHexString(b & 0xff)+ " ");
}
System.out.println();
byte[] bytes2 = s.getBytes("gbk");
for (byte b : bytes2) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
// utf-8 中文占3个字节,英文占1一个字节
byte[] bytes3 = s.getBytes("utf-8");
for (byte b : bytes3) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
// Java是双字节编码utf-16be, 中文占用2字节,英文占用2字节
byte[] bytes4 = s.getBytes("utf-16be");
for (byte b : bytes4) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
/*
* 当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,
* 也需要用这种编码方式,否则会出现乱码
*/
String str1 = new String(bytes4);
System.out.println(str1);
String str2 = new String(bytes4, "utf-16be");
System.out.println(str2);
/**
* 总结:文本文件就是字节序列,可以是任意编码的字节序列
*/
}
}