字符集

来自GSXAB的知识库
字符集
术语名称 字符集
英语名称 character set
别名 charset
编码字符集
术语名称 编码字符集
英语名称 coded character set
别名 coded charset, 字符映射, character mapping, charmap, 代码页, code page
码位
术语名称 码位
英语名称 code point
编码空间
术语名称 编码空间
英语名称 code space

字符集(character set)是一个规则集,一些选定字符集合。字符集一般与一种或多种字符编码绑定,包含指定场景下需要或能够表示的全体字符。 字符集中通常对每个字符唯一标识(通常是整数,或者通俗地说,编号、数字代号),此时称为编码字符集(coded character set)/字符映射(charmap)/代码页(code page),这一标识称为码位(code point)。 一个编码字符集中全体可能的码位总范围称为编码空间(code space),编码空间是可能范围或取值上限,不一定都已经被填充。 编码字符集中,可以通过编码表示的全部字符的集合称为字符库/字库表(character repertoire)。

在计算机内部存储、传输时,需要将编码字符集中的码位再次映射到二进制串,以及将二进制串映射回码位,这两个过程中的规则及算法称为字符编码。但由于很多时候字符集和字符编码是一对一关系,此时由码位到二进制串的映射常常是恒等映射,逻辑上字符到码位与码位到二进制串的两次映射被合二为一,因此有人会混淆这两个词,但实际是不同层级的概念,这也使得字符编码可以广义地指从字符到二进制串的完整过程。

由于术语较为琐碎,人们有时不区分字符集和字符库,不区分字符集和编码字符集。且对这些层级的划分存在一些争议。

根据是否可以扩展,字符集(严格地说是字库表)大致分为三类。封闭的字符集指一个字符集标准已经冻结,永远固定不变;有限开放或向后兼容的字符集指字符集虽然固定,但是留有可以扩展的空间,使用这些空间需要更改字符集内码位排布方式,这些更改无法现在确立,导致未来字符集可以向后兼容当前字符集,当前字符集无法向前兼容未来字符集(只能知道出现了当前无法解析的内容,无法确认这一内容的格式、是否要解析成一个或多个字符等);开放的字符集指字符集可以继续扩展字符,一般留有可扩展编码空间以及扩展方式,保证未来扩展无需更改底层框架,仍然与当前字符集互相兼容,可以按照当前方式解析未来的码位(不知道是什么字符,但能保证这一码位一定只是一个现在无法辨认的字符)。


常见字符编码
早期编码 电报码、 BCD 、ASCIIISO 646
ISO 8859 ISO 8859-1 、 ISO 8859-2 、……
各国国家标准及代码页 GB 2312GBKGB 18030
Unicode / ISO 10646 UTF-7 、 UTF-8、 UTF-16 、 UTF-32