字节与字符的区别

105 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。

字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。

一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。

image.png

字节与字符:

  • 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