python_编码集的介绍

一、unicode的解释来自百度百科

 

1、ASCII    最知名的可能要数被称为ASCII的7位字符集了。它是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。

2、但是,由于他是针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。因此,创建出了一些包括255个字符的由ASCII扩展的字符集。其中有一种通常被称为IBM字符集,它把值为128-255之间的字符用于画图和画线,以及一些特殊的欧洲字符。另一种8位字符集是ISO 8859-1Latin 1,也简称为ISOLatin-1。它把位于128-255之间的字符用于拉丁字母表中特殊语言字符的编码,也因此而得名。

ASCII码格式

 

欧洲语言不是地球上的唯一语言,因此亚洲和非洲语言并不能被8位字符集所支持。仅汉语字母表(或pictograms)就有80000以上个字符。但是把汉语、日语和越南语的一些相似的字符结合起来,在不同的语言里,使不同的字符代表不同的字,这样只用2个字节就可以编码地球上几乎所有地区的文字。因此,创建了UNICODE编码。它通过增加一个高字节对ISO Latin-1字符集进行扩展,当这些高字节位为0时,低字节就是ISO Latin-1字符。UNICODE支持欧洲、非洲、中东、亚洲(包括统一标准的东亚象形汉字和韩国象形文字)。但是,UNICODE并没有提供对诸如Braille, Cherokee, Ethiopic, Khmer, Mongolian, Hmong, Tai Lu, Tai Mau文字的支持。同时它也不支持如Ahom, Akkadian, Aramaic, Babylonian Cuneiform, Balti, Brahmi, Etruscan, Hittite, Javanese, Numidian, Old Persian Cuneiform, Syrian之类的古老文字。

 

事实证明,对可以用ASCII表示的字符使用UNICODE并不高效,因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF(Universal Transformation Format)。常见的UTF格式有:UTF-7, UTF-7.5, UTF-8,UTF-16, 以及 UTF-32
 
二、utf-8来自维*百科

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

UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多4位字节):

  1. 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。
  2. 带有附加符号拉丁文希腊文西里尔字母亚美尼亚语希伯来文阿拉伯文叙利亚文它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)。
  3. 其他*本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码(Unicode范围由U+0800至U+FFFF)。
  4. 其他极少使用的Unicode 辅助平面的字符使用四至六字节编码(Unicode范围由U+10000至U+1FFFFF使用四字节,Unicode范围由U+200000至U+3FFFFFF使用五字节,Unicode范围由U+4000000至U+7FFFFFFF使用六字节)。

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

三、GBK 编码

GBK汉字内码扩展规范K为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Specification。

3.1历史

1993年,Unicode 1.1版本推出,收录中国大陆台湾日本韩国通用字符集汉字,总共有20,902个。

中国大陆订定了等同于Unicode 1.1版本的“GB 13000.1-93”“信息技术通用多八位编码字符集(UCS)第一部分:体系结构与*本多文种平面”。

由于GB 2312-80只收录6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理***的“*”字),台湾及香港使用的繁体字日语朝鲜语汉字等,并未有收录在内。于是厂商微软利用GB 2312-80未使用的编码空间,收录GB 13000.1-93全部字符制定了GBK编码。

根据微软资料,GBK是对GB2312-80的扩展,也就是CP936字码表 (Code Page 936)的扩展(之前CP936和GB 2312-80一模一样),最早实现于Windows 95简体中文版。虽然GBK收录GB 13000.1-93的全部字符,但编码方式并不相同。

GBK自身并非国家标准,只是曾由国家技术监督局标准化司、电子工业部科技与质量监督司公布为“技术规范指导性文件”。原始GB13000一直未被业界采用,后续国家标准GB18030技术上兼容GBK而非GB13000。

3.2定义

字符有一字节和双字节编码,007F范围内是一位,和ASCII保持一致,此范围内严格上说有96个文字和32个控制符号。

之后的双字节中,前一字节是双字节的第一位。总体上说第一字节的范围是81FE(也就是不含80FF),第二字节的一部分领域在407E,其他领域在80FE

具体来说,定义的是下列字节:

GBK的编码范围
范围第1字节第2字节编码数字数
水准 GBK/1 A1A9 A1FE 846 717
水准 GBK/2 B0F7 A1FE 6,768 6,763
水准 GBK/3 81A0 40FE (7F除外) 6,080 6,080
水准 GBK/4 AAFE 40A0 (7F除外) 8,160 8,160
水准 GBK/5 A8A9 40A0 (7F除外) 192 166
用户定义 AAAF A1FE 564  
用户定义 F8FE A1FE 658  
用户定义 A1A7 40A0 (7F除外) 672  
合计:  23,94021,886

双字节符号可以表达的64K空间如下图所示。绿色和黄色区域是GBK的编码,红色是用户定义区域。没有颜色区域是不正确的代码组合。

本文内容整理自维*百科,建议先阅读俺之前的《Windows代码页》和《Unicode和MBCS》。

微软的CP936通常被视为等同GBK,连 IANA 也以“CP936”为“GBK”之别名。事实上比较起来, GBK 定义之字符较 CP936 多出95字(15个非汉字及80个汉字)。

GB2312或GB2312-80是中国国家标准简体中文字符集,1981年5月1日实施,通行于中国大陆,新加坡也采用此编码。GB2312标准共收录6763个汉字以及包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

由于GB2312里有很多汉字并没有收录,繁体字、日语以及朝鲜语汉字也未收录在内。于是微软利用GB2312未使用的编码空间,收录GB13000.1-93全部字符制订了GBK编码。GBK是对GB2312的扩展,向下完全兼容GB2312,也就是CP936字码表的扩展(在此之前CP936与GB2312-80完全一样)。GBK采用单字节和双字节编码,兼容ASCII。

GB 18030,版本为GB 18030-2000,全称中华人民共和国国家标准GB 18030-2005《信息技术 中文编码字符集》。与GB2312完全兼容,与GBK*本兼容,支持GB 13000和Unicode的全部统一汉字,共收录汉字70244个。采用多字节编码(1/2/4)。

参考资料:

http://zh.wikipedia.org/wiki/GB_2312

http://zh.wikipedia.org/wiki/GBK

http://zh.wikipedia.org/wiki/GB_1803

四、CP963 编码

本文内容整理自维*百科,建议先阅读俺之前的《Windows代码页》和《Unicode和MBCS》。

微软的CP936通常被视为等同GBK,连 IANA 也以“CP936”为“GBK”之别名。事实上比较起来, GBK 定义之字符较 CP936 多出95字(15个非汉字及80个汉字)。

GB2312或GB2312-80是中国国家标准简体中文字符集,1981年5月1日实施,通行于中国大陆,新加坡也采用此编码。GB2312标准共收录6763个汉字以及包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

由于GB2312里有很多汉字并没有收录,繁体字、日语以及朝鲜语汉字也未收录在内。于是微软利用GB2312未使用的编码空间,收录GB13000.1-93全部字符制订了GBK编码。GBK是对GB2312的扩展,向下完全兼容GB2312,也就是CP936字码表的扩展(在此之前CP936与GB2312-80完全一样)。GBK采用单字节和双字节编码,兼容ASCII。

GB 18030,版本为GB 18030-2000,全称中华人民共和国国家标准GB 18030-2005《信息技术 中文编码字符集》。与GB2312完全兼容,与GBK*本兼容,支持GB 13000和Unicode的全部统一汉字,共收录汉字70244个。采用多字节编码(1/2/4)。

参考资料:
http://zh.wikipedia.org/wiki/GB_2312
http://zh.wikipedia.org/wiki/GBK
http://zh.wikipedia.org/wiki/GB_18030

出处:http://blog.csdn.net/fennvde007/article/details/20769179

posted @ 2017-01-13 14:07  坏脾气  阅读(453)  评论(0编辑  收藏  举报