您的位置:首页 > 其它

字符编码小记

2016-02-03 14:19 330 查看
字符编码

1. 基础概念

“字符编码”分为 字符集 和 编码方案 两个含义。

(1)字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

(2)字符集(Characterset)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。

(3)编码方案。计算机要准确的处理各种字符集文字,需要对字符进行编码,以便计算机能够识别和存储各种文字。编码的含义就是,如何用一个01串表示一个字符集中的某一个字符。

(4)一个字符集,可以使用至少一种编码方案。比如,Unicode是字符集,同时Unicode也是编码方案,UTF8,UTF16,UTF32这三个也都是Unicode字符集的编码方案。

(5)通常,编码方案的名称也使用与字符集相同的名称。这是因为字符集指定的时候,也同时考虑了存储时的编码方案。如GB2312既是字符集也是编码方案。

2.

编码方案,在存储的实现上,可分为:单字节,多字节,宽字节。

单字节:只使用一个字节表示字符。

多字节:使用1个至2个表示字符。

宽字节:使用4字节表示字符。

其中,单字节和宽字节,字符所占用的字节数是固定的。多字节字符所占的字节数不固定。

3. 概念区分

字符集

编码方案

Unicode

GB2312

GBK

GB18030

BIG5

ASCII

JIS

Unicode

UTF-8

UTF-16

UTF-32

GB2312

GBK

GB18030

BIG5

ASCII

JIS

4. Unicode

(1)Unicode编码系统为表达任意语言的任意字符而设计。Unicode是一种编码系统。

(2)它使用4字节的数字来表达每个字母、符号,或者表意文字(ideograph)。每个数字代表唯一的至少在某种语言中使用的符号。4字节可表示40亿个字符。

(3)(并不是所有的数字都用上了,但是总数已经超过了65535,所以2个字节的数字是不够用的。)被几种语言共用的字符通常使用相同的数字来编码,除非存在一个在理的语源学(etymological)理由使不这样做。不考虑这种情况的话,每个字符对应一个数字,每个数字对应一个字符。即不存在二义性。

计算机科学领域中,Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统。

5. 各种概念



5.1 ANSI & ASCII & MBCS & Unicode的诞生与渊源

ANSI是美国国家标准局的简称。

ASCII码(American Standard Code for Information Interchange)是美国标准信息交换码,有ANSI制定。ASCII既是一个字符集也是一种编码方案。

基本ASCII集只有127个字符。占7bit。扩展ASCII多包含128个字符。占8bit。一个ASCII字符占1个字节。

为了显示本国的语言,且兼容ASCII,产生了一种2个字节表示的编码方式。由于ASCII码占用7位的历史原因,所以这种2个字节的编码方式规定:对于连续的2个字节,只有在2个字节的bit7都是1的情况下,才认为这2个字节合起来表示一个汉字。这样不同长度混排的编码方法,通常被叫做"MBCS(Muilti-Bytes Charecter Set,多字节字符集)",如"中文ABC"这串文本,它所占用的字节数可能就是:2×2+3=7。由于MBCS是兼容ANSI的ASCII的,因此MBCS也使用ANSI做简称。

但是,因为不同的国家和地区制定了不同的MBCS,因此各国的MBCS是不同、且不兼容的。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,所以在中文 windows下要转码成gb2312,gbk只需要把文本保存为ANSI
编码即可。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。一个很大的缺点是,同一个编码值,在不同的编码体系里代表着不同的字符。这样就容易造成混乱。导致了unicode码的诞生。

其中每个语言下的ANSI编码,都有一套一对一的编码转换器,Unicode变成所有编码转换的中间介质。所有的编码都有一个转换器可以转换到Unicode,而Unicode也可以转换到其他所有的编码。

5.2 UCS

通用字符集(UniversalCharacter Set,UCS

Unicode 是基于UCS的标准来发展。

5.3 UTF-32

UTF-32又称UCS-4是一种将Unicode字符进行编码的协定,对每个字符都使用4字节。

5.4 UTF-16

尽管有Unicode字符非常多,但是实际上大多数人不会用到超过前65535个以外的字符。因此,就有了另外一种Unicode编码方式,叫做UTF-16(因为16位 = 2字节)。

5.5 UTF-8

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。

UTF-8使用一至四个字节为每个字符编码

5.6 ASCII

ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。



5.7 GB2312

GB2312也是ANSI编码里的一种,对ANSI编码最初始的ASCII编码进行扩充,为了满足国内在计算机中使用汉字的需要,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。其中最有影响的是于1980年发布的《信息交换用汉字编码字符集 基本集》,标准号为GB2312-1980,因其使用非常普遍,也常被通称为国标码。GB2312编码通行于我国内地;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持GB
2312。

GB2312是一个简体中文字符集,由6763个常用汉字和682个全角的非汉字字符组成。其中汉字根据使用的频率分为两级。一级汉字3755个,二级汉字3008个。由于字符数量比较大,GB2312采用了二维矩阵编码法对所有字符进行编码。首先构造一个94行94列的方阵,对每一行称为一个“区”,每一列称为一个“位”,然后将所有字符依照下表的规律填写到方阵中。这样所有的字符在方阵中都有一个唯一的位置,这个位置可以用区号、位号合成表示,称为字符的区位码。如第一个汉字“啊”出现在第16区的第1位上,其区位码为1601。因为区位码同字符的位置是完全对应的,因此区位码同字符之间也是一一对应的。这样所有的字符都可通过其区位码转换为数字编码信息。GB2312字符的排列分布情况见表1-4。

表1-4 GB2312 字符编码分布表

分区范围

符号类型

第01区

中文标点、数学符号以及一些特殊字符

第02区

各种各样的数学序号

第03区

全角西文字符

第04区

日文平假名

第05区

日文片假名

第06区

希腊字母表

第07区

俄文字母表

第08区

中文拼音字母表

第09区

制表符号

第10-15区

无字符

第16-55区

一级汉字(以拼音字母排序)

第56-87区

二级汉字(以部首笔画排序)

第88-94区

无字符

GB2312字符在计算机中存储是以其区位码为基础的,其中汉字的区码和位码分别占一个存储单元,每个汉字占两个存储单元。

5.8 几种汉字字符集的关系

GB2312是简体中文编码表。支持6000多汉字。由中国标准化司发布。

GBK是微软对GB2312的扩展。

GB18030是对GBK的扩展,兼容GBK和GB2312。支持7万多汉字。由中国标准化司发布。

Big5,又称为大五码或五大码,是繁体中文字符集标准,共收录13,060个汉字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: