2024年4月8日发(作者:)

Unicode字符编码标准

Unicode字符编码标准

1. 编码知识

1.1 文本和字符

在计算机程序中或者数据文件里,文本(text)是作为数字序列

存储的。序列中的数字是具有不同大小、取值和解释的整数。如何解

释这些整数是由字符集(character set)、编码(encoding)决定的。

文本主要是由字符(character)组成。在格式文本(fancy text,

or rich text)中包括显示属性,如颜色、斜体字、上标等,但仍然是

以字符组成的纯文本(plain text)为基础的。有时,格式文本与纯文

本之间的区别很复杂,依赖于具体的应用。什么是字符?典型地,是

字母。也可以是数字、句点、连字号、标点符号和数学符号,对于中

文,也可以是汉字。还包括定义行尾和段落等的控制字符(一般不可

见)。

有了字符,就可以为它们分配数字编码。为字符分配什么数字值,

依赖于具体情况。一个简单的字符,如字母"a",在不同的程序或者数

据文件中可能具有不同的整数值。

1.2 字符集:具有数字编码的字符

在信息处理中,所使用的整数总有上限,依赖于存储整数的位的

数目。这也决定了可以同时区分的字符的数量。

在设计字符集时,首先要决定所需字符的数目,并确定所需字符

的清单。根据字符的数目,可以设定整数值的上限,这个整数范围称

为编码空间(code space),其中的一个特定整数称为一个码点

(code point)。

然后,为字符清单中的每个字符指定一个整数值,也就是一个码

点。这样就得到一个字符集,称作编码字符集(Coded Character

Set)。

1.3 编码单元、字节和编码

在计算机系统的实现中,整数以特定大小的单元表示,通常为8

位(1字节),16位,或32位。在字符编码中,这样的单元称为编码

单元(code unit)。根据编码空间的大小和具体要求,来选择合适的

编码单元。通常,所选择编码单元对应的整数范围要大于编码空间的

整数范围,这样每个码点就只需一个编码单元表示,并且在字符码点

与编码单元间的转换非常简便,因为字符码点对应的整数值与相应编

码单元的整数值相同。如果编码单元对应的整数范围小于编码空间的

整数范围,就需要多个编码单元表示一个码点。

字节是计算机系统中最基本的表示单元,无论是存储在内存中,

还是将文本写入文件或通过网络发送,总是要读写若干字节。因此,

在实际应用中,还需要将编码单元进一步表示为字节序列。

将字符表示为字节序列的过程就称为编码(encoding),更重要

的是,还包括如何对字节序列进行解释以取得字符。1.4 不同的字符集

在一些常用的编码中,每个字符只使用一个字节表示,称单字节

字符集(single-byte character set, SBCS)。这些字符集都仅限于

256个字符。

在ASCII之后,目前应用最广泛的单字节字符集是ISO-8859-1。

它是ASCII的一个8位超集,并且提供西欧语言所需的大多数字符。

它的一个改进的版本,ISO-8859-15,还包括新的欧元符号和更多的

一些法语和芬兰语字母。

双字节字符集(double-byte character set, DBCS)用于为东亚

书写系统中所使用成千上万个表意字符提供足够空间。这里的编码仍

是基于字节的,不过是两个字节一起表示一个单一的字符。

即使在东亚,文本中也会包含小字母表中的字母,如拉丁字母表。

这些字母使用单字节表示的效率会更高。因此,提出了多字节字符集

(multi-byte character set, MBDC),使用可变数目的字节来表示字

符。多字节字符集通常与ASCII 兼容,也就是说,在这种编码中,拉

丁字母使用与ASCII中相同的字节来表示。一些不常用的字符可能会

使用三个甚至四个字节编码。

1.4 常见字符集

1.4.1 ASCII: The American Standard Code form Information