分享

刨根究底字符编码之二A——关键术语解释(中)

 昵称11935121 2018-07-21

关键术语解释(中)

刨根究底字符编码之二A——关键术语解释(中)

一、第1层 抽象字符表ACR (Abstract Character Repertoire抽象字符清单):明确字符的范围(即确定支持哪些字符)

1.

抽象字符表ACR是一个编码系统支持的所有抽象字符的集合,可以简单理解为无序抽象字符集合,用于确定字符的范围,即要支持哪些字符。

抽象字符表ACR的一个重要特点是字符的无序性,即其中的字符并没有编排数字顺序,当然也就没有数字编号。

2.

抽象”字符不具有某种特定的字形,不应与具有某种特定字形的“具体”字符混淆。

3.

字符表可以是封闭的(即字符范围是固定的),即除非创建一个新的标准(ASCII字符表和多数ISO/IEC 8859系列都是这样的例子),否则不允许添加新的符号;字符表也可以是开放的(即字符范围是不固定的),即允许不断添加新的符号(Unicode字符表和一定程度上Code Page代码页是这方面的例子)。

二、第2层 编号字符集CCS(Coded Character Set):用数字编号表示字符(即用数字给字符编号)

【注:一般将“Coded Character Set”翻译为“编码字符集”或“已编码字符集”,但这里的“编码”二字容易导致与后文的“编码方式”及“编码模式”中的“编码”二字混淆,带来理解上的困扰,因此觉得翻译为“编号字符集”为宜。】

1.

前面讲了,抽象字符表里的字符是没有编排顺序的,但无序的抽象字符表只能判断某个字符是否属于某个字符表,却无法方便地引用、指称该字符表中的某个特定字符。

为了更方便地引用、指称字符表中的字符,就必须为抽象字符表中的每个字符进行编号。

所谓字符编号,就是将抽象字符表ACR中的每个抽象字符(简称字符)表示为1个非负整数N或者映射到1个坐标(非负整数值对x, y),也就是将抽象字符的集合映射一个非负整数或非负整数值对的集合,映射的结果就是编号字符集CCS。因此,字符的编号也就是字符的非负整数代码。

例如,在一个给定的抽象字符表中,表示大写拉丁字母“A”的字符被赋予非负整数65、字符“B”是66,如此继续下去。

2.

由此产生了编号空间(Code Space,一般翻译为代码空间、码空间、码点空间)的概念:根据抽象字符表中抽象字符的数目,可以设定一个字符编号的上限值(该上限值往往设定为大于抽象字符表中的字符总数),从0到该上限值之间的非负整数范围就称之为编号空间

编号空间的描述:

1)可以用一对非负整数来描述,例如:GB2312的汉字编号空间是94 x 94;

2)也可以用一个非负整数来描述,例如:ISO-8859-1的编号空间是256;

3)也可以用字符的存储单元尺寸来描述,例如:ISO-8859-1是一个8比特的编号空间(2^8=256);

4)还可以用其子集来描述,如行、列、面(Plane平面、层面)等等。

3.

编号空间中的一个位置(Position)称为码点(Code Point代码点)或码位(Code Position代码位)。一个字符占用的码点所在的坐标(非负整数值对)或所代表的非负整数,就是该字符的编号,又称之为码点值(即码点编号)

不过,严格来讲,字符编号并不完全等同于码点编号(即码点值)。因为事实上,由于某些特殊的原因,编号字符集CSS里的码点数量要大于抽象字符表ACR中的字符数量。

在编号字符集中,除了字符码点之外,还存在着非字符码点和保留码点,所以字符编号不如码点编号准确;但若对字符码点的码点编号称之为字符编号,倒也更为直接。

字符码点又称之为Unicode标量值(Unicode Scalar Value,感觉不如字符码点更为直观),非字符码点和保留码点详见后文介绍。

4.

注意,经常直接以“码点”指代“码点值”——当说到“码点”的时候,有可能是在说编号空间(即码点空间)中的一个位置,即码点;也有可能实际是在说某个码点的码点值,即码点编号。具体根据上下文而定。

这种类似的指代非常普遍,又比如“字符集”、“字符编号”和“字符编码”这三个概念就经常相互指代。以“码点”指代“码点值”,根据上下文,倒也还不难理解;但“字符集”、“字符编号”和“字符编码”三者也经常相互指代,虽然有其历史原因,但目前的实际情况所导致的结果却是使人迷惑、让人抓狂!

5.

因此,所谓编号字符集,可简单理解为就是把抽象字符一一进行编号或者说一一映射为码点值(即码点编号)后所得到的结果。编号字符集CSS常简称为字符集。

注意不要将编号字符集CSS抽象字符表ACR相混淆。多个不同的编号字符集CCS可以表示同一个抽象字符表ACR,反之,同一个抽象字符表ACR可以对应多个不同的编号字符集CSS。

6.

刨根究底字符编码之二A——关键术语解释(中)

在Unicode标准中,一个单个的抽象字符,既有可能与多个码点对应(为了与其它标准兼容,比如码点编号为U+51C9与U+F979的这两个码点实际上是同一个字符“凉”,这是为了兼容韩国字符集标准KS X 1001:1998,具体可参看Unicode的官方文档),也有可能使用一个由多个码点所组成的码点序列表示(为了表示由基本字符与组合字符组合在一起所组成的字符,比如à,由码点编号为U+0061的基本字符字母“a”和码点编号为U+0300的组合字符读音符号“̀”组成);同时,也并非每一个码点都对应于一个字符,也存在着非字符码点或保留码点。详见后文解释。

7.

特别注意:虽然“编号”与后文某种字符编码方式CEF中的“编码”(即码元序列,解释详见后文)以及某种字符编码模式CES中的“编码”(即字节序列,解释详见后文)存在着对应的关系,但“编号”与“编码”是截然不同的两个概念

对字符编号的过程——即确定字符码点值的过程,跟计算机还没有直接关系,可认为是一个纯数学的问题,因为只是将字符与编号(即码点值、码点编号)对应起来;根本还没涉及编码算法的问题——即根据指定的字符编码方式CEF对编号进行编码以形成码元序列,以及根据指定的字符编码模式CES对码元序列进一步编码以形成字节序列。

但这两个概念经常被混用,实实在在是让人困惑的源头,这是很令人无奈与遗憾的现实。

后注:本文主标题“刨根究底字符编码之二A”的后面加注了一个字母A,这主要是考虑到原文太长,于是发布之前临时决定拆分成两篇,为了不打乱原先文章的编号,所以才如此。对此深表抱歉。】

(未完待续)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多