一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情
字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。
字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。
一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。
字节与字符:
- ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
- UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
- Unicode 编码中,一个英文为 4 个字节,一个中文为 4 个字节。(因为在Java 中以 UTF-16 作为的字符存储格式,而在Python 中 Unicode 编码中,一个英文 一个字节,一个中文为两个字节)
- 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
- UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 4 个字节
- UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。
/**
* @author 胡孟帆
* @date 2022/4/24 10:02
*/
public class TestCode {
public static void main(String[] args) throws UnsupportedEncodingException {
String[] charsetNames={
"UTF-8",
"UTF-16",
"UTF-32",
"unicode",
"GBK",
"GB2312",
"GB18030",
"ISO8859-1",
"BIG5",
"ASCII"
};
for(int i=0;i<charsetNames.length;i++){
printByteLength(charsetNames[i]);
}
test1();
}
/**
* String类的不带参数的getBytes()方法会以程序所运行平台的默认编码方式为准来进行转换,
* 在不同环境下可能会有不同的结果,因此建议使用指定编码方式的getBytes(String charsetName)方法。
*/
public static void printByteLength(String charsetName){
String en="a"; //一个英文字符
String zh="啊"; //一个中文字符
try {
System.out.println(charsetName+"编码英文字符所占字节数:"+en.getBytes(charsetName).length);
System.out.println(charsetName+"编码中文字符所占字节数:"+zh.getBytes(charsetName).length);
System.out.println();
} catch (UnsupportedEncodingException e) {
System.out.println("非法编码格式!");
}
}
}
-
UTF-8编码英文字符所占字节数:1
-
UTF-8编码中文字符所占字节数:3
-
UTF-16编码英文字符所占字节数:4
-
UTF-16编码中文字符所占字节数:4
-
UTF-32编码英文字符所占字节数:4
-
UTF-32编码中文字符所占字节数:4
-
unicode编码英文字符所占字节数:4
-
unicode编码中文字符所占字节数:4
-
GBK编码英文字符所占字节数:1
-
GBK编码中文字符所占字节数:2
-
GB2312编码英文字符所占字节数:1
-
GB2312编码中文字符所占字节数:2
-
GB18030编码英文字符所占字节数:1
-
GB18030编码中文字符所占字节数:2
-
ISO8859-1编码英文字符所占字节数:1
-
ISO8859-1编码中文字符所占字节数:1
-
BIG5编码英文字符所占字节数:1
-
BIG5编码中文字符所占字节数:2
-
ASCII编码英文字符所占字节数:1
-
ASCII编码中文字符所占字节数:1