首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Unicode 及编码方式概述-1

Unicode 及编码方式概述-1

背景概述我们都知道计算机是不能直接存储字母,数字,图片,符号等,计算机能处理和工作的唯一单位是"比特位(bytes)",一个比特位通常只有 0 和                1,是(yes)和否(no),真(true)或者假(false)等等我们喜欢的称呼。利用比特位序列来代表字母,数字,图片,符号等,我们就需要一个存储规则,不同的比特序列代表不同的字符,这就是所谓的"编码"。反之,将存储在计算机中的比特位序列(或者叫二进制序列)解析显示出来成对应的字母,数字,图片和符号,称为"解码"。提到编码不得不说到字符集,因为任何一种编码方式都会有一个字符集与之对应。
然而计算机领域通常所讲的字符集实际上是指字符编码集,而不是传统意义上的字符库,除了包括一个系统支持的所有抽象字符(如国家文字、标点符号、图形符号、数字等)外,还包括字符所对应的一个数值,所以通常是一个二维表,下文提到的字符集都是指字符编码集。常见字符集如                ASCII 字符集、ISO-8859-X、GB2312 字符集(简中)、BIG5 字符集(繁中)、GB18030 字符集、Shift-JIS                等等。之前的很长一段时间内,字符集和字符编码区分不是很严格,因为一般一种字符集只对应一种编码方式,但是这些编码方式存在下面的问题:
  • 没有一种编码可以覆盖全世界所有国家的字符;
  • 各种编码之间也会存在冲突的现象,两种不同编码方式可能使用同一个编码代表不同的字符,亦或用不同的编码代表同一个字符;
  • 一个指定的机器(比如我们的服务器)将需要支持许多不同的编码方式,当数据在不同的机器之间传输或者在不同的编码之间转换时,很容易产生乱码问题。
多语言软件制造商组成的统一码联盟(The Unicode Consortium)于 1991 年发布的统一码标准(The Unicode                Standard),定义了一个全球统一的通用字符集即 Unicode                字符集解决了上述的问题。统一码标准为每个字符提供一个唯一的编号,旨在支持世界各地的交流,处理和显示现代世界各种语言和技术学科的书面文本。此外,它支持许多书面语言的古典和历史文本,不管是什么平台,设备,应用程序或语言,都不会造成乱码问题,                它已被所有现代软件供应商采用,是目前所有主流操作系统,搜索引擎,浏览器,笔记本电脑和智能手机以及互联网和万维网(URL,HTML,XML,CSS,JSON                等)中表示语言和符号的基础。统一码标准的一个版本由核心规范、Unicode 标准、代码图、Unicode 标准附件以及 Unicode                字符数据库(Unicode Character Database 简写成                UCD)组成,同时也是开发的字符集,在不断的更加和增加新的字符,最新的版本为 Unicode 10.0.0。
在 Unicode 字符集发布的第三年,ISO/IEC 联合发布了通用多八位编码字符集简称为 UCS(Universal Character Set                通用字符集),也旨在使用全球统一的通用字符集。两套通用字符集使用起来又存在麻烦,后来统一码联盟与 ISO/IEC 经过协商,到到 Unicode                2.0 时,Unicode 字符集和 UCS 字符集基本保持了一致。现在虽然双方都发布各自的版本,但两套字符集是相互兼容的,Unicode                字符集使用比 UCS 字符集更加广泛。
Unicode 介绍世界经济日益全球化的同时,一个应用程序需要在全球范围内使用势在必然,基于 Unicode                的应用程序能够很好地处理来自世界各地的用户文本,并适应其文化习俗。                它通过消除每种语言的构建,安装和维护更新来最大限度地降低成本。Unicode(与其并行 ISO 10646                标准)标准除了覆盖全球所有地区国家使用的字符外,它还定义了一系列文本处理的数据和算法,极大简化了 Unicode                的应用,并确保所有遵守其标准的软件产生相同的结果。在过去十年的广泛应用中,Unicode 成为互联网的基石。
Unicode 编码字符集旨在收集全球所有的字符,为每个字符分配唯一的字符编号即代码点(Code Point),用                U+紧跟着十六进制数表示。所有字符按照使用上的频繁度划分为 17 个平面(编号为 0-16),即基本的多语言平面和增补平面。基本的多语言平面(英文为                Basic Multilingual Plane,简称 BMP)又称平面 0,收集了使用最广泛的字符,代码点从 U+0000 到                U+FFFF,每个平面有 216=65536 个码点;增补平面从平面 1~16,分为增补多语言平面(平面                1)、增补象形平面(平面 2)、保留平面(平 3~13)、增补专用平面等,每个增补平面也有 216=65536 个码点。所以                17 个平总计有 17 × 65,536 = 1,114,112 个码点。图 1 是 Unicode 平面分布图,图 2 是 Unicode                各个平面码点空间。
图 1. Unicode 17                    个平面分布
图 2. Unicode                    平面分布和码点空间
下面是一些相关术语的解释:
Coded Character                Set(CCS):即编码字符集,给字符表里的抽象字符编上一个数字,也就是字符集合到一个整数集合的映射。这种映射称为编码字符集,Unicode                字符集就是属于这一层的概念;
Character Encoding                Form(CEF:即字符编码表,根据一定的算法,将编码字符集(CCS)                中字符对应的码点转换成一定长度的二进制序列,以便于计算机处理,这个对应关系被称为字符编码表,UTF-8、 UTF-16 属于这层概念;
Code Point:                码点,简单理解就是字符的数字表示。一个字符集一般可以用一张或多张由多个行和多个列所构成的二维表来表示。二维表中行与列交叉的点称之为码点,每个码点分配一个唯一的编号,称之为码点值或码点编号,除开某些特殊区域(比如代理区、专用区)的非字符码点和保留码点,每个码点唯一对应于一个字符。
Code Unit:代码单元,是指一个已编码的文本中具有最短的比特组合的单元。对于 UTF-8 来说,代码单元是 8                比特长;对于 UTF-16 来说,代码单元是 16 比特长。换一种说法就是 UTF-8 的是以一个字节为最小单位的,UTF-16                是以两个字节为最小单位的。
Code Space:码点空间,字符集中所有码点的集合。
BOMByte Order                    Mark):字节序,出现在文件头部,表示字节的顺序,第一个字节在前,就是"大头方式"(Big-Endian),第二个字节在前就是"小头方式"(Little-Endian)。这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》,在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。
返回列表