没有合适的资源?快使用搜索试试~ 我知道了~
详细介绍计算机字符集的文档
需积分: 0 5 下载量 120 浏览量
2009-03-23
09:13:00
上传
评论
收藏 200KB DOC 举报
温馨提示
试读
30页
在计算机程序中或者数据文件里,文本(text)是作为数字序列存储的。序列中的数字是具有不同大小、取值和解释的整数。如何解释这些整数是由字符集(character set)、编码(encoding)决定的。
资源详情
资源评论
资源推荐
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 Interchange
ASCII 是一个使用 7 位单元的字符集,及针对 7 位字节的简单编码方式。尽管局限于很
少的一些字符,ASCII 是最重要的一种字符集,因为它是目前大多数字符集的基础。
ASCII 只提供了 128 个数字值(也可称作码点,code point),其中 33 个被保留用作特
殊功能。只有 95 个码点用作“真正的”文本字符。这些图形字符大多时大写和小写拉丁字母 ,
数字和标点符号,外加一些特殊的括号、下划线和重音符号。
1.4.2 EBCDIC: The Extended Binary-Coded Decimal Interchange Code
EBCDIC 是 由 IBM 设计的编 码格 式, 使用 8 位字 节, 被一 些字 符集 用于 大型 机
EBCDIC 在与 ASCII 相近的时期开发的,具有一些相似的特性。
1.4.3 Unicode
Unicode 标准定义了一个字符集和几种编码。
Unicode 最有吸引力的特点是它涵盖了几乎世界上的所有字符,可以只通过一个唯一
的数字(Unicode 码点)来访问和操作字符。
2. Unicode 介绍
2.1 为什么使用 Unicode?
在创造 Unicode 之前,有数百种编码系统。但是,没有任何一个编码可以包含足够的
字符。例如,仅欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一的一
种语言,如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符
号。
这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同
的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需
要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据
总会有损坏的危险。
而 Unicode 正在改变所有这一切!
在 Unicode 标准中,提供了 1,114,112 个码点,不仅可以包含当今世界使用的所有语言
文字和其他符号,也足够容纳绝大多数具有历史意义的古文字和符号。并且, Unicode 给
每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。
Unicode 标 准 已 经 被 工 业 界 的 领 导 们 所 采 用 , 例 如 : Apple, HP, IBM, JustSystem,
Microsoft, Oracle, SAP, Sun, Sybase, Unisys 等等。最新的标准都需要 Unicode,例如 XML,
Java, ECMAScript , LDAP, CORBA 3.0, WML 等等,并且,Unicode 是实现 ISO/IEC 10646
的正规方式。许多操作系统,所有最新的浏览器和许多其他产品都支持它。 Unicode 标准
的出现和支持它工具的存在,是近来全球软件技术最重要的发展趋势。
2.2 Unicode 与国际化
直到最近,国际化的常用方法是,假定任何给定的可执行程序同时只和一种语言工作。
如果在英文环境下安装,它就只处理英文文本;如果在中文环境下安装,就只处理中文文
本。
在这种模型下,针对不同的书写系统和语言,使用的字符集和字符编码不同。在
Windows 和大型机环境下,术语“代码页”(Code Page)用于描述如何将二进制值映射到人类
可读得字符(字形)。一个运行的程序处在单一的代码页,该代码页确定二进制值如何与
字形关联。
有 ANSI code page,Macintosh code page,OEM code page 等。
简便的国际化是 Unicode 的另一项优势。在内部使用 Unicode 的应用程序,能够同时
存储和处理世界上所有的字符,这消除了传统的国际化方法所面临的一些困难。
当然,成功的国际化不仅仅是在应用程序中采用 Unicode,还需要谨慎的屏幕布局设
计(不同的语言具有不同的书写习惯)、翻译和文化理解。
2.3 设计原则
Unicode 的设计反映了十大基本原则,但这些原则并不是可以同时满足。整个设计是
在保证简便高效和保持与已有编码标准兼容之间的平衡。
(1)广泛性(Universality)
Unicode 标准对一个单一的大字符集进行编码,包括满足世界范围需求的所有字符。
(2)高效(Efficiency)
在 Unicode 的字符编码模型中没有换码符(escape character),每个字符编码与其它字符
编码具有相同的状态。使高效率的实现成为可能。
所有 Unicode 编码方式都是自同步的,并且相互不重叠。使在字符流中随机访问和查
找操作高效。
同一书写字母体系中的字符被放置在一起,不仅方便字符的查找,并且使实现更紧凑
压缩方法更高效。
(3)针对字符编码,而不是字形(Character, Not Glyph)
字符是书写语言中具有语义的最小组件的抽象表示。字符是以驻留在内存中的码点表
示。
字形是字符被显示时具有的形状。与字符相比,字形出现在屏幕或纸张上作为一个或
多个字符的特定表示。字形的集合构成一种字体。
字符和字形间存在多种关系:一个字形可以对应一个字符;一个字形也可以对应几个
字符;多个字形也可能出自一个字符。
(4)语义(Semantic)
在 Unicode 中,字符都有明确定义的语义。字符属性表可用于解析、排序等需要有关
码点语义知识的算法中。Unicode 中定义的属性包括数字、间隔、组合和方向属性。
(5)纯文本(Plain Text)
纯文本或无格式文本,仅仅是字符编码的序列。纯 Unicode 文本就是 Unicode 编码的
序列。而格式文本(styled text, or rich text)是由纯文本添加一些附加信息(如语言标识、
字体大小、颜色等)组成的文本表示。
Unicode 标准针对的是纯文本。
(6)逻辑顺序(Logical Order)
Unicode 文本在内存表示中以逻辑顺序存储,大致对应于借助键盘输入文本的顺序。
在一些情况下,当显示或打印文本时,字符顺序与逻辑顺序不同。
(7)统一(Unification)
Unicode 标准为避免对字符重复编码,对不同语言书写方式中的字符进行统一,相同
的字符分配唯一的一个编码。普通字母、标点符号、标记,和变音符都只分配一个编码,
而不管语言;同样的还有中日韩使用的表意字符。
(8)动态组合(Dynamic Composition)
Unicode 标准允许加重音符好的形式和 Hangul 音节的动态组合。
(9)等价序列(Equivalent Sequences)
一些文本元素即可以使用静态的预先组合好的形式,也可使用动态组合的形式 。
Unicode 字符的不同表示序列被认为是等价的。
如果两个或多个序列被认为是等价的,Unicode 标准不规定哪一种特定的序列是正确
的,而认为每一个序列只不过与其它序列等价。
如果需要一种单一的单一的表示方式,可以使用一种规范化的 Unicode 文本形式来减
少 不 想 要 区 别 。 Unicode 标 准 定 义 了 四 种 规 范 化 形 式 : Normalization Form D
(NFD),Normalization Form KD (NFKD) ,Normalization Form C (NFC) ,和 Normalization
Form KC (NFKC)。大约来说,NFD 和 NFKD 将可能的字符进行分解,而 NFC 和 NFKC 将
可能的字符进行组合。
(10)可转换性(Convertibility)
在 Unicode 标准和其他字符集标准之间可以实现准确的转换。一般说,在其他标准中
的一个码点对应于 Unicode 标准中一个单一的码点。然而,有时在其他标准中的一个码点
对应于 Unicode 标准中一个码点的序列。在 Unicode 文本和其他字符编码文本间的转换一
般是通过明确的表映射过程完成的。
2.4 Unicode 的码点、编码格式、编码方案
2.4.1 Unicode 编码空间和码点
在 Unicode 标准中,编码空间的整数范围是从 0 到 10FFFF(16 进制),共 1,114,112
个可用的码点。
为了与已有的编码标准兼容,一些抽象字符可能会与多个分别编码的字符关联。而在
其他一些情况下,一个抽象字符可能会用两个(或更多)编码字符序列来表示,如带重音
符的字母。
2.4.2 Unicode 编码格式
在 Unicode 字符编码模型中,编码格式(encoding form)指定如何将每个码点表示为
一个或多个编码单元序列。Unicode 标准提供了三种不同的编码格式,使用 8 位、16 位和
32 位编码单元,分别为 UTF-8、UTF-16、UTF-32。
(1)UTF-32
UTF-32 是一种最简单的 Unicode 编码格式。每个 Unicode 码点被直接表示为一个 32 位
的编码单元。UTF-32 是一种固定宽度的字符编码格式。
每个 UTF-32 编码单元的值与 Unicode 码点的值完全相同。
(2)UTF-16
在 UTF-16 中,在范围 U+0000 到 U+FFFF 间的码点使用一个单一的 16 位编码单元表
示;而,在范围 U+10000 到 U+10FFFF 间的码点则使用一对 16 位编码单元表示,称作代理
对(surrogate pair)。
UTF-16 优化了基本多语言平面(Basic Multilingual Plane)中字符的表示,即位于 U+0000
到 U+FFFF 范围内的字符。该范围包含了目前世界上所使用的书写系统中的绝大多数字符 ,
每个字符只需要一个 16 位的编码单元。对于基本多语言平面,UTF-16 可作为固定宽度的
编码格式来有效使用。
但对于增补字符,UTF-16 需要两个 16 位的编码单元,意味着正式的 UTF-16 是一个变
宽的编码格式。
UTF-16 是早期 Unicode 遗留下的历史产物,原本被设计成具有固定宽度的 16 位编码
格式。为支持超过 U+FFFF 的增补字符,设立了代理机制。
(3)UTF-8
为满足基于 ASCII,面向字节的系统的需要,Unicode 标准中定义了第三种编码格式
UTF-8。它是一种使用 8 位编码单元的变宽的编码格式。
在 UTF-8 的编码单元种,一些高位用于指示当前字节在编码单元序列中的那一部分。
8 位编码单元的取值的一部分范围保留给 UTF-8 的编码单元序列的首字节;另一部分完全
奋力的范围保留给序列中的后续字节,以保证 UTF-8 不重叠。
UTF-8 编码格式 对 所 有 ASCII 码 点具有透 明 性 。 在 U+0000 到 U+007F 范围内 的
Unicode 码点,被转换为 UTF-8 中单一的字节 0x00 到 0x7F,与 ASCII 码没有区别。并且,
从 0x00 到 0x7F 不会出现在其他 Unicode 码点的 UTF-8 表示中的任一字节中,保证了不存
在歧义。
Unicode 中超出 ASCII 范围的其他一些非表意字母,每个都在 UTF-8 中使用两个字节
表示;位于 U+0800 到 U+FFFF 范围内的非代理码点使用三字节表示;超出 U+FFFF 的增补
码点则需要四字节表示。
UTF-8 是 Internet 中 HTML 和类似协议偏好的编码格式。
UTF-8 同其他的多字节编码方式相比具有以下特点:
a) UTF-8 的编码单元序列的第一个字节指明了后面所跟的字节的数目。对前向解析
非常有效。
b) 从 UTF-8 字节流的任意位置开始可以有效的找到一个字符的其实位置。
c) UTF-8 中不存在字节取值的重叠。
2.4.3 Unicode 编码方案
在 Unicode 标准 中,用于 Unicode 数据字节串行化的各种不同类型的规范被称为
Unicode 编码方案(encoding scheme)。
在计算机系统中,大数值类型(如整型)使用多个字节表示,不同体系结构采用的字
节排列顺序不同。其中,部分采用由高字节到低字节的排列顺序,称为 big-endian;其他则
采用由低字节到高字节的排列顺序,称 little-endian。
对于 UTF-16 和 UTF-32,字节串行化规范必须考虑当前表示数据的系统采用的是 big-
剩余29页未读,继续阅读
jishenda
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0