eleclike的草园 https://bbs.21ic.com/?491367 [收藏] [复制] [RSS]   欢迎来到eleclike的草园,谢谢你的支持!  希望和你一起学习电子技术,共同进步!        

日志

计算机编码方式的演进

已有 1532 次阅读2009-4-16 07:09 |个人分类:随便聊|系统分类:通信网络| 计算机编码, ASCII, UNICODE, ISO

计算机编码方式


 


 


●●●●●ISO 646



ISO/IEC 646是国际标准化组织(ISO)和国际电工委员会(IEC)制订的标准,在1972年制订。它是一个 7-位元字符的字集,来自数个国家标准,最主要来自美国的 ASCII(美国信息互换标准代码)。ISO 646 除了英语字母和数字的部分,为所有国家相同外,有些使用字母的国家,可按照实际需要,把 ISO 646 作出修改,以定出该国的字符标准。亦因为当年 8-位元字符集并未得到普遍的接纳,各国把不同的字母或符号放进它们的字符集,以致部分出现在 ASCII 的字母或符号,并没有出现在某些国家的 ISO 646 变体之中。


 





 


●●●●●ASCII 美国标准信息交换码


American Standard Code for Information Interchange,


适用于所有拉丁文字字母,有两种编码方式


7位码


第0~32和第127号(共34个)是控制字符和通讯专用字符,如:LF(0x0A)、CR(0x0D)、DEL(0x7F)


空格的ACSII为0x32,也是可以显示的的代码之一



第33~126(共94个)是可显示字符,



8位码




在使用c语言时,某些字符是可以通过转义字符来代替这个区间的ASCII码的。


0x00 '\0'


0x07 '\a'


0x08 '\b'


0x09 '\t'


0x0A '\n'


0x0B '\v'


0x0C '\f'


0x0D '\r'


0x5C(\) '\\'



在计算机内码中,汉字是用两个ASCII码表示,且码值都大于127(>=0x80)。


 


●●●●●ISO 8859


ISO 8859,全称ISO/IEC 8859,是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位字符集的标准,现时定义了15个字符集。



由于英语没有任何重音字母(不计外来词),故可使用以上十五个字集中的任何一个来表示。


至于德语方面,因它除了 A-Z, a-z 外,只用 Ä, Ö, Ü, ä, ö, ß, ü 七个字母,而所有拉丁字集(1-4, 9-10, 13-16)均有此七个字母,故德语可使用以上十个字集中的任何一个来表示。



此系列中没有-12号的原因是,此计划原本要设计成一个包含塞尔特语族字符集的“Latin-7”,但后来塞尔特语族变成了ISO 8859-14 / Latin-8。亦有一说谓-12号本来是预留给印度天城体梵文的,但后来却搁置了。



每个字集定义最多96个字母或符号,在0xA0-0xFF根据不同字符集放入不同的字符。


0x00-0x1F、0x7F、0x80-0x9F在此字符集中未有定义。(控制字符是由ISO/IEC 6429定义)。



---------------------------------------


 ISO 8859与ISO-8859的关系


在ISO/IEC 8859-n之中,国际标准化组织只替每个字符集定义了最多96个字符(0xA0-0xFF)。



ISO-8859-n(在ISO与8859之间加上一连字号)则是由IANA根据ISO/IEC 8859-n所定义的编码表。它除了ISO/IEC 8859-n的字符外,还包括ASCII(0x20-0x7E)字符及65个控制字符(0x00-0x1F及0x7E-0x9F)。


---------------------------------------


EASCII :ISO/IEC 8859-1见附录B


EASCII字符快速输入法:


打开小键盘,按住ALT键,然后输入EASCII码(如按注ALT键在依次输入[Num2][Num5][Num5]可输入特殊空格(255空格))。



====================================


●●●●●UNICODE



Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。


Unicode用数字0-0x10FFFF(最多6位16进制数值)来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位


Unicode 的首256字符仍旧保留给ISO 8859-1 所定义的字符



编码方式:


USC-X, X:表示使用的字节个数


实现方式:


UTF-NN, NN:表示二进制数的个数,但并非说一个UNICODE只用8个bits就可以表示。



--------------------------------------------------


●●●编码方式


Unicode标准有UCS-2(用2个字节表示)、UCS-4(用4个字节表示)的说法


UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个平面(plane)。group 0的平面0被称作BMP(Basic Multilingual Plane)。每个平面根据第3个字节分为256行 (row),每行有256个码位(cell),这样每个平面有2^16=65536个码位。Unicode计划使用了17个平面,一共有17*65536=1114112个码位


UCS-2将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。目前使用的比较多的编码方式为该种编码方式,它定义了65536种字符。


在Unicode 5.0.0版本中,已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA。
  平面0也有一个专用区:0xE000-0xF8FF,有6400个码位。平面0的0xD800-0xDFFF,共2048个码位,是一个被称作代理区(Surrogate)的特殊区域。代理区的目的用两个UTF-16字符表示BMP以外的字符。在介绍UTF-16编码时会介绍。
  如前所述在Unicode 5.0.0版本中,238605-65534*2-6400-2408=99089。余下的99089个已定义码位分布在平面0、平面1、平面2和平面14上,它们对应着Unicode目前定义的99089个字符,其中包括71226个汉字。平面0、平面1、平面2和平面14上分别定义了52080、3419、43253和337个字符。平面2的43253个字符都是汉字。平面0上定义了27973个汉字。


--------------------------------------------------


●●● 实现方式


Unicode 实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。Unicode 的实现方式称为Unicode转换格式(Unicode Translation Format,简称为 UTF)。



--------------------------------------------------


UTF-8:ASCII和ISO/IEC 8859-1的御用实现方法。


UTF-8(8 位元 Universal Character Set/Unicode Transformation Format)是一种针对 Unicode 的可变长度字符编码。它可以用来表示 Unicode 标准中的任何字符,且其编码中的第一个字节仍与 ASCII 相容,这使得原来处理 ASCII 字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他储存或传送文字的应用中,优先采用的编码。



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



128 个 ASCII 字符只需一个字节编码(Unicode 范围由 U+0000 至 U+007F)


带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode 范围由 U+0080 至 U+07FF)


其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码。 


其他极少使用的 Unicode 辅助平面的字符使用四字节编码。 



对上述提及的第四种字符而言,UTF-8 使用四个字节来编码似乎太耗费资源了。但 UTF-8 对所有常用的字符都可以用三个字节表示,而且它的另一种选择,UTF-16编码,对前述的第四种字符同样需要四个字节来编码,所以要决定 UTF-8 或 UTF-16 哪种编码比较有效率,还要视所使用的字符的分布范围而定。不过,如果使用一些传统的压缩系统,比如 DEFLATE,则这些不同编码系统间的的差异就变得微不足道了。若顾及传统压缩算法在压缩较短文字上的效果不大,可以考虑使用 Standard Compression Scheme for Unicode(SCSU)。




--------------------------------------------------


UTF-16:多用于表示BMP的字符,也可看做UCS-2的御用实现方法。


UTF-16 编码实现方式中使用了大尾序(Big-Endian, 简写为UTF-16 BE)、小尾序(Little-Endian, 简写为UTF-16 LE)的概念,以及可附加的BOM(Byte Order Mark)解决方案,目前在PC机上的Windows系统和Linux系统对于UTF-16编码默认使用UTF-16 LE。




--------------------------------------------------


UTF-32:UCS-4的御用实现方法。





--------------------------------------------------


●●●表示方式


表达一个 Unicode 的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符在基本多文种平面(Basic Multilingual Plane,简称 BMP)里的所有字符,只要使用四位十六进制数(例如 U+4AE0,共支持六万多个字符)来表示,但在 BMP 以外的字符则需要使用五位或六位十六进制数了。










 


 


 


●●●●●UCS


ISO 10646


通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的字符编码方式,采用4字节编码。


通用字符集又称Universal Multiple-Octet Coded Character Set,中国大陆译为通用多八位编码字符集,台湾译为广用多八位元编码字元集。




通用字符集是所有包括了其他字符集。它保证了与其他字符集的双向兼容,即,如果你将任何文本字符串翻译到UCS格式,然后再翻译回原编码,你不会丢失任何信息。



UCS包含了已知语言的所有字符。除了拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的象形文字,UCS还包括大量的图形、印刷、数学、科学符号。



ISO/IEC 10646定义了一个31位的字符集。0十六进制的7FFFFFFF这样的字码空间中。区别与UNICODE 的范围为:0-0x10FFFF




ISO/IEC 10646-1标准第一次发表于1993年,现在的公开版本是ISO/IEC 10646-1:2000。ISO/IEC 10646-2在2001年发表。



UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。



--------------------------------------------------


●●UCS的实现级别


并不是所有的系统都需要支持像组合字符这样的的先进机制。因此ISO 10646指定了如下三种实现级别:



级别1:不支持组合字符和韩语Hangul Jamo字符 


级别2:类似于级别1,但在某些文字中,允许一列固定的组合字符,因为如果没有最起码的几个组合字符,UCS就不能完整地表达这些语言。 


级别3:支持所有的UCS字符,如,可以在任意一个字符上加上一个箭头或一个tilde. 




--------------------------------------------------


●●Unicode和ISO 10646的关系


历史上存在两个独立的尝试创立单一字符集的组织,即国际标准化组织(ISO)和多语言软件制造商组成的统一码协会(Unicode Consortium)。前者开发的 ISO/IEC 10646 项目,后者开发的Unicode项目。因此最初制定了不同的标准。



1991年前后,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码;ISO也承诺,ISO 10646将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致。两个项目仍都存在,并独立地公布各自的标准。但统一码协会和ISO/IEC JTC1/SC2都同意保持两者标准的码表兼容,并紧密地共同调整任何未来的扩展。在发布的时候,Unicode一般都会采用有关字码最常见的字型,但ISO 10646一般都尽可能采用Century字型。




 --------------------------------------------------


●●Unicode和ISO 10646的异同


统一码协会公布的Unicode标准包含了ISO/IEC 10646-1实现级别3的基本多文种平面。在两个标准里,所有的字符都在相同的位置并且有相同的名字。



ISO/IEC 10646标准,就像ISO/IEC 8859标准一样,只不过是一个简单的字符集表。它定义了一些编码的别名,指定了一些与标准有关的术语,并包括了规范说明,指定了怎样使用UCS连接其他ISO标准的实现,比如ISO/IEC 6429和ISO/IEC 2022。还有一些与ISO紧密相关的,比如ISO/IEC 14651是关于UCS字符串排序的。



Unicode标准,额外定义了许多与字符有关的语义符号学。Unicode详细说明了绘制某些语言(如阿拉伯语)表达形式的算法,处理双向文字(比如拉丁文和希伯来文的混合文字)的算法,排序与字符串比较所需的算法,等等。



由于Unicode这一名字比较好记,因而它使用更为广泛。不过一般认为,用于打印ISO/IEC 10646-1标准的字体在某些方面的质量,要高于Unicode 2.0。



两者部分样例字形有显著的区别。ISO/IEC 10646-1标准同样使用四种不同的风格变体来显示表意文字如中文、日文、韩文(即CJK),但Unicode 2.0的表里只有中文的变体。甚至存在“Unicode对日本用户来说不可接受”的不实传说。



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)