字符集与编码格式研究

本文最后更新于 2025年4月17日 中午

前言

  • 首先,为什么需要编码??因为计算机本身可不认识:‘你在做什么?’、‘what are you doing?’等这么人类性的语言;在计算机内部,所有的信息都表示为一个二进制的字符串。而每一个二进制位(bit)有0和1两种状态,具体哪些二进制数表示什么字符,多少位表示什么字符,需要有一个标准,也就是编码。
  • 比特(bit):是计算机科学中的基本单位,代表着二进制数字的最小单元,一个比特通常用0和1来表示。
  • 字节(Byte):一个字节通常由8位二进制组成,是计量存储容量的单位,是构成信息的一个很小的单位,上面还有KB、MB、GB、TB、PB、EB、ZB、YB等。
  • 字符:各种文字、符号的总称。例如文字、标点、图形、数字、字母等等。
  • 字符集:顾名思义,就是一定数量的字符组成的集合,字符集种类比较多,而且每个字符集包含的字符个数也不同,常见字符集主要有:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等,字符集为每一个【字符】分配一个唯一的 ID(学名为码位 / 码点 / Code Point)。
  • 字符编码:将字符集中的每个字符映射为字节流的实现方案(编码方案),即属于将【码位】转换为字节序列的规则,便于计算机存储和传输;常见的字符编码有ASCII编码、UTF-8编码、GBK编码、Base64编码等。某种意义上来说,字符集与字符编码有种对应关系,例如 ASCII字符集对应有ASCII编码。
  • 编码与解码:编码的过程是将字符转换成字节流,解码的过程是将字节流解析为字符。

常见的字符集和编码格式

字符集

1
2
3
4
5
ASCII(American Standard Code for Information Interchange)
Unicode
ISO 8859
GB2312、GBK、GB18030(中国国家标准)
big5 (繁体中文)

编码格式

1
2
3
4
5
6
UTF-8(Unicode Transformation Format – 8-bit)
UTF-16(Unicode Transformation Format – 16-bit)
UTF-32(Unicode Transformation Format – 32-bit)
ASCII(在 ASCII 字符集下的编码,与 ASCII 字符集同名)
ISO 8859(在 ISO 8859 字符集下的编码,与 ISO 8859 字符集同名)
GB2312、GBK、GB18030(在 GB 字符集下的编码,与相应的字符集同名)

关系阐述

  • ASCII 是最早的字符集之一,包含128个字符,用于表示基本的拉丁字母、数字、标点符号和控制字符。ASCII 字符集的编码格式也被称为 ASCII 编码。
  • Unicode 是一种字符集,旨在包含世界上所有的字符,它支持数百种语言的字符。UTF-8、UTF-16 和 UTF-32 是 Unicode 字符集的不同编码格式,用于将 Unicode 字符映射到计算机存储和传输的二进制数据。
  • ISO 8859 是一系列字符集,每个字符集用于支持不同的语言和地区。ISO 8859 字符集的编码格式与字符集同名,例如 ISO 8859-1、ISO 8859-2 等。
  • GB2312、GBK、GB18030 是中国制定的字符集标准,用于支持中文字符。GB 字符集的编码格式与字符集同名,例如 GB2312 编码、GBK 编码等。
  • 总之,字符集定义了一组字符的集合,而编码格式则定义了如何将这些字符映射到计算机存储和传输所使用的二进制数据。编码格式是字符集的实际实现方式,通过编码格式,字符集中的字符可以被准确地表示、存储和传输。

兼容性问题

各个字符集之间是互不兼容的,如果两个字符需要跨字符集转换,需要找到两个字符都能互相兼容的字符集进行转换。同一个汉字字符集里的码值是完全不一样的。如"汉"的Unicode值与gbk就是不一样的,假设Unicode十六进制为a040,GBK十六进制为b030。以UTF-8为例,UTF-8码完全只针对Unicode来组织的,如果GBK要转UTF-8必须先转Unicode码,再转UTF-8