计算机中的字符集
Published in:2024-07-09 |

计算机中所有的数据都是用二进制来表示的,这些二进制对于人类而言,阅读起来并不友好。所以就出现了字符编码,使用不同的二进制数据来表示不同的字符。当我们进行电子文档阅读的时候,计算机会将二进制的数据解码成对应的字符,以人类语言可读的方式呈现给用户。不同的编码方式就会产生不同的字符集,每种字符集都有其独特的编码解码方式,使用A字符集的解码方式去解码B字符集的文档就会出现乱码的情况。

计算机诞生于美国,所以在计算机诞生之初,仅支持英文的编码。在英语中只有26个英文字母(包括大小写)以及一些特殊的标点符号,再加上计算中的一些特殊字符,如回车换行等,所有的这些字符加在一起也就100多个,使用一个字节(8位)足以表示这些所有的字符。二进制中,8位的二进制数总共有 0 ~ 255 共 256 个值,在最初的时候,仅仅用了7位就足以表示所有的字符。

后来随着计算机的推广普及,计算机销售到了欧洲、亚洲,为了满足不同国家不同语言的使用需求,随后出现了更多的字符编码。以下列举了常用的字符集:

  1. ASCII字符集

    • 定义:ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于罗马字母表的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
    • 发展:ASCII第一次以规范标准的形式发表是在1967年,最后一次更新则是在1986年。它是最早出现的最原始的字符集,至今仍然是计算机中最基础、最通用的字符编码标准之一。
    • 特点:ASCII是7位编码,共128个字符,其中32到126是可打印字符,包括英文字母、阿拉伯数字和标点符号等。为了表示更多的欧洲常用字符,ASCII进行了扩展,使用8位表示一个字符,共256个字符。
  2. GB2312字符集

    • 定义:GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,是中国国家标准的简体中文字符集。
    • 发展:GB2312由中国国家标准总局发布,于1981年5月1日实施。它基本满足了汉字的计算机处理需要,覆盖了当时中国大陆99.75%的使用频率。
    • 特点:GB2312共收录7445个字符,包括6763个汉字和682个其他字符(如拉丁字母、希腊字母、日文假名等)。它对所收汉字进行了“分区”处理,每区含有94个汉字/符号,并采用了两个字节的编码方式。
  3. BIG5字符集

    • 定义:BIG5又称为大五码或五大码,是台湾地区使用的繁体中文字符集。
    • 发展:BIG5由台湾财团法人信息工业策进会和五家软件公司于1984年创立,以解决当时台湾不同厂商各自推出不同编码且彼此不能兼容的问题。
    • 特点:BIG5共收录13,053个中文字符,使用双字节储存方法。尽管它包含了大量的繁体中文字符,但并未收录所有流通的汉字,如人名、地名用字等。
  4. GB18030字符集

    • 定义:GB18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是中国政府于2000年发布的新的汉字编码国家标准。
    • 发展:GB18030字符集标准的出台经过广泛参与和论证,旨在解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。
    • 特点:GB18030字符集标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。它与Unicode 3.0版本兼容,并填补了Unicode扩展字符字汇“统一汉字扩展A”的内容。
  5. Unicode字符集

    • 定义:Unicode是Universal Multiple-Octet Coded Character Set(通用多八位编码字符集)的简称,由Unicode学术学会(Unicode Consortium)制订的字符编码系统。
    • 发展:Unicode于1990年开始研发,1994年正式公布,最新版本是2012年1月31日的Unicode 6.1(注意:此版本信息已较旧,Unicode仍在不断更新中)。
    • 特点:Unicode为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。它支持现今世界各种不同语言的书面文本的交换、处理及显示。

    在 Unicode 字符集中又有许多不同的版本:UTF-8、UTF-16、UTF-32是三种不同的Unicode编码方式,它们各自具有不同的特点和应用场景。

    UTF-8

    定义与特点

    • UTF-8(Unicode Transformation Format-8)是一种基于Unicode的可变长度字符编码,兼容ASCII,广泛用于互联网数据交换。
    • 它使用1到4个字节来表示一个字符,根据字符在Unicode中的位置决定所需的字节数量。
    • 对于ASCII字符(U+0000至U+007F),UTF-8编码与ASCII编码相同,即单字节编码,最高位为0。
    • 对于非ASCII字符,UTF-8采用多个字节进行编码,每个字节除了高位用来标识这是一个多字节序列的一部分外,其余位包含实际字符编码信息。

    优点

    • 兼容ASCII:对于只包含ASCII字符的文本,UTF-8和ASCII编码是相同的,因此对现有系统的影响最小。
    • 解决乱码问题:因为UTF-8能够统一表示世界上几乎所有的书写系统字符,包括拉丁字母、西里尔字母、汉字、日文假名等,所以它解决了不同语言文字编码不兼容的问题。
    • 节省存储空间:由于UTF-8编码可以根据字符的不同长度进行压缩,因此在存储和传输文本数据时可以节省存储空间和带宽。

    缺点

    • 由于是可变长度编码,处理速度可能不如固定长度编码。

    UTF-16

    定义与特点

    • UTF-16是另一种Unicode编码方式,使用16位(即2字节)或32位(即4字节)二进制来表示字符。
    • 它源于UCS-2,是Unicode最早的编码方式之一。UCS-2编码仅覆盖了基本平面(即BMP,第0平面)中的码点,使用固定的两字节将字符编号(类似于Unicode中的码点值)直接映射为字符编码。
    • 为支持增补平面(平面1至16,码点范围为0x10000至0x10FFFF)中的字符,UTF-16引入了“代理(代替)机制”,使用两个基本平面中未定义的码点合起来代替一个增补平面的码点,从而成为一种变长编码方式。

    优点

    • 对于大部分常用字符,UTF-16使用两个字节表示,处理速度较快。
    • 能够表示Unicode字符集中的所有字符。

    缺点

    • 存在字节序问题(大端序和小端序),可能导致信息交换时出现乱码。
    • 对于某些增补平面中的字符,需要使用四个字节表示,增加了存储空间的使用。

    UTF-32

    定义与特点

    • UTF-32是Unicode编码方式中最为简单的一种,它将每个Unicode字符码点值直接表示为一个32位的码元序列。
    • 因此,UTF-32是一种固定宽度(也称为等宽、等长或定长)的Unicode字符编码方式。

    优点

    • 处理速度快:由于UTF-32是定长编码,因此在文本处理速度上是三种UTF编码方式中最快的。
    • 能够直接表示Unicode字符集中的所有字符,无需使用复杂的代理算法。

    缺点

    • 存储空间浪费:即使是ASCII字符,在UTF-32中也需要占用32位(即四个字节),这在三种UTF编码方式中无疑是最为浪费存储空间的。
Prev:
Character Set in Computers
Next:
计算机要点概述