初识字符集

原创 2011年01月09日 16:41:00

2011-01-09 16:05:21


字符集的概念

 

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。


字符集和编码(Encoding)不同。字符集只是文字的集合,不一定适合作网络传送、处理,有时须经编码(Encode),将字符对应至所属的特定二元表示法后,才能应用。如CNS 11643和GB 2312可以使用ISO/IEC 2022、EUC等标准编码。Unicode可依不同需要以UTF-8、UTF-16、UTF-32等方法编码。有些字符集如Big5通常不须额外编码即可使用,故Big5既是字符集又是编码

 

如果从头说起,字符集最早的编码方案来自于与ASCII.
这也是我们最常见的编码方式。该方案起源于1960年代初期,最初是美国国会图书馆制定用来作为美国图书馆界书目交换的共同标准,最后完善成为美国的国家标准ASCII(American Standard Codefor Information Interchange),之后进一步演变成世界性的计算机字符编码标准ISO646(其全名为7-bit coded character set for information interchange)。成为计算机编码方案的基础。

Oracle数据库最早支持的编码方案也就是US7ASCII.
但是我们知道,英文字符一般是以一个字节来存储的,7位的编码方案最多只能代表128个字符;经过扩展的8位的编码方案也只能代表256个字符,这远远不能满足计算机发展的需要,对于亚洲国家复杂的字符存储需要更多的码位,于是各种编码方案随之而生。

为了容纳全世界各种语言的所有字符和符号,解决不同编码之间的兼容和转换问题,1991年元月,10多家公司共同出资,组建Unicode协会,随后Unicode编码产生了。
Unicode协会的口号是: 给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。
最初Unicode编码使用2-Byte(16bit)来进行编码,但是最多只能容纳65536个字符,仍然不够使用,后来进行了扩充,也就是Unicode3.1标准,增加了额外的补充字符定义,现在Unicode4.0标准已经发布,具体可以参考Unicode官方站点:

www.unicode.org

Unicode编码方案主要有三个实施标准:
UTF-8
USC-2
UTF-16
Oracle从7.2开始支持UTF-8编码,提供Unicode编码支持。

按照各种标准的含义,Oracle推荐,如果你的数据库需要存放不同语言的不同符号和字符,建议使用Unicode编码方案。诚然,Unicode方案可以表示更多的字符,但是由于多位的存储,需要额外的存储空间和网络传输,所以选择最适合的数据库字符集仍然需要慎重考虑。

 

 

 


 

常用字符集

 

ASCII

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符,其中33个字符无法显示(这是以现今操作系统为依归,但在DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的用途主要是用来操控已经处理过的文字,在33个字符之外的是95个可显示的字符,包含用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。

GB 2312

GB 2312或GB 2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集·基本集》,又称为GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。

对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

GBK

GBK全名为汉字内码扩展规范,英文名Chinese Internal Code Specification。K 即是“扩展”所对应的汉语拼音(KuoZhan11)中“扩”字的声母。GBK 来自中国国家标准代码GB 13000.1-93。

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

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

由于GB 2312-80只收录了6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。中文电脑开发商,于是利用了GB 2312-80未有使用的编码空间,收录了所有出现在Unicode 1.1及GB 13000.1-93之中的汉字,制定了GBK编码。

根据西方资料,GBK最初是由微软对GB2312的扩展,也就是CP936字码表 (Code Page 936)的扩展(原来的CP936和GB 2312-80一模一样),最初出现于Windows 95简体中文版中,由于Windows产品的流行和在大陆广泛被使用,中华人民共和国国家有关部门将其作为技术规范。注意GBK并非国家正式标准,只是国家技术监督局标准化司、电子工业部科技与质量监督司发布的“技术规范指导性文件”。虽然GBK收录了所有Unicode 1.1及GB 13000.1-93之中的汉字,但是编码方式与Unicode 1.1及GB 13000.1-93不同。仅仅是GB 2312到GB 13000.1-93之间的过渡方案。

Big5

Big5,又称为大五码或五大码,是使用繁体中文(正体中文)社群中最常用的计算机汉字字符集标准,共收录13,060个汉字。

中文码分为中文内码及中文交换码两类,Big5属中文内码,知名的中文交换码有CCCII、CNS11643。

Big5虽普及于台湾、香港与澳门等繁体中文通行区,但长期以来并非当地的国家标准,而只是业界标准。倚天中文系统、Windows等主要系统的字符集都是以Big5为基准,但厂商又各自增删,派生成多种不同版本。

2003年,Big5被收录到台湾官方标准的附录当中,取得了较正式的地位。这个最新版本被称为Big5-2003。

“五大码”(Big5) 是在1984年,台湾13家厂商制作开发五大中文套装软件,由中华民国财团法人信息工业策进会为五大中文套装软件所设计的中文内码,所以就称为Big5中文内码,虽然五大套装软件并没有成功,但随着采用Big5码的国乔中文系统及倚天中文系统先后在台湾市场获得成功,使得Big5码深远地影响正体中文计算机内码,直至今日。“五大码”的英文名称“Big5”后来被人按英文字序译回中文,以致现在有“五大码”和“大五码”两个中文名称。

Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如IBM 5550、王安码等,彼此不能兼容;另一方面,台湾当时尚未推出官方的汉字编码,而中国大陆所推行的GB 2312编码,亦未有收录繁体字。在这样的时空背景下,为了使台湾早日进入信息时代,所采行的一个计划;同时,这个计划对于以台湾为内核的亚洲繁体汉字圈也产生了久远的影响。

Big5产生前,研发中文计算机的朱邦复认为这套内码收字过少,在资策会内码会议提出采用他的五万多字的字库。工程师已肯定其技术可行,但在1983年朱邦复被诬为共产党,资策会因此放弃其研究成果。

在Big5码诞生后,大部分台湾的计算机软件都使用了Big5码,加上后来倚天中文系统的高度普及,使后来的微软 Windows 3.x等亦予以采用。虽然后来台湾还有各种想要取代Big5码,像是倚天中文系统所推行的倚天码、中华民国中文电脑公会所推动的公会码等,但是由于Big5字码已沿用多年,因此在习惯不易改变的情况下,始终无法成为主流字码。而台湾以后发展的国家标准中文交换码(CNS 11643)由于先天所限,必须使用3字节来表示一个汉字,与现行英语软件欠缺兼容,所以普及率远远不及Big5码。

在1990年代初期,当中国大陆的电子邮件和转码软件还未普遍之时,在深圳的港商和台商公司亦曾经使用Big5系统,以方便与总部的文件交流、以及避免为大陆的办公室再写一套不同内码的系统。在使用简体中文社群,最常用的是GB 2312、GBK及其后续的国标码(GB 18030)。

现在,除了台湾外,其他使用繁体汉字的地区,如香港、澳门,及使用繁体汉字的海外华人,都普遍使用Big5码。这已经成为繁体中文显示的标准格式。

UTF-8

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

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

128 个 US-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)。

互联网工程工作小组(IETF)要求所有互联网协议都必须支援 UTF-8 编码。互联网邮件联盟(IMC)建议所有电子邮件软件都支援 UTF-8编码。所有主要的电子邮件软件中,只有 Eudora 不支援 UTF-8 编码。

 

 

 


 

 

字符集常识

 

什么是unicode, GB2312, GBK, ANSI, UTF?

发展过程 ASCII à GB2312(BIG5) à GBKàGB18030

 

 

 

 

字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5

 

GB2312(1980)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE

 

GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。

 

ASCIIGB2312GBK,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312GBK都属于双字节字符集 (DBCS)

 

2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。从汉字字汇上说,GB18030GB13000.120902个汉字的基础上增加了CJK扩展A6582个汉字(Unicode 0x3400-0x4db5),一共收录了27484个汉字。

 

CJK就是中日韩的意思Unicode为了节省码位,将中日韩三国语言中的文字统一编码。GB13000.1就是ISO/IEC 10646-1的中文版,相当于Unicode 1.1

 

GB18030的编码采用单字节、双字节和4字节方案。其中单字节、双字节和GBK是完全兼容的。4字节编码的码位就是收录了CJK扩展A6582个汉字。 例如:UCS0x3400GB18030中的编码应该是8139EF30UCS0x3401GB18030中的编码应该是8139EF31

 

微软提供了GB18030的升级包,但这个升级包只是提供了一套支持CJK扩展A6582个汉字的新字体:新宋体-18030,并不改变内码。Windows 的内码仍然是GBK

 

 

 

 

ASCIIGB2312GBKGB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容

 

Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。unicode java 中的编码转换桥梁,使用了以组流过滤器来桥接unicode编码文本和本地操作系统编码文本的隔阂(内码,windowsGBK).所有的class 派生自abstract class Reader and Writer .后面继续研究.

 

 

 

 

由于现有的大量程序和文档都采用了某种特定语言的编码,例如GBKWindows不可能不支持现有的编码,而全部改用Unicode我们称GBKwindows的内码.Windows使用代码页(code page)来适应各个国家和地区。code page可以被理解为内码。GBK对应的code pageCP936

 

 

 what is UCS?

 

Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCSUCS可以看作是"Unicode Character Set"的缩写。

 

UCS有两种格式:UCS-2UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。

 

 

 

 

 

 

 

什么是UTF

UTF,是Unicode Text Format的缩写,意为Unicode文本格式。对于UTF,是这样定义的

 

 

 

 

1)如果Unicode16位字符的头9位是0,则用一个字节表示,这个字节的首位是 “0”,剩下的7位与原字符中的后7位相同,如“u0034”0000 0000 0011 0100),用“34” (0011 0100)表示;(与源Unicode字符是相同的);

 

 

 

 

2)如果Unicode16位字符的头5位是0,则用2个字节表示,首字 节是“110”开头,后面的5位与源字符中除去头5个零后的最高5位相同;第二个字节以“10”开头,后面的6位与源字符中的低6位相同。如“ u025d”0000 0010 0101 1101),转化后为“c99d”1100 1001 1001 1101);

 

3)如果不符合上述两个规则,则用三个字节表示。第一个字节以“1110”开头,后四位为源字符的高四位;第二个字节以“10”开头,后六位为源字符中 间的六位;第三个字节以“10”开头,后六位为源字符的低六位;如“u9da7”1001 1101 1010 0111),转化为“e9b6a7”1110 1001 1011 0110 1010 0111);

 

 

 

 

 

 

 

 

 

UCS  UTF 的联系

UTF-8就是以8位为单元对UCS进行编码

 

UTF-1616位为单元对UCS进行编码

 

 


 

中文字符集

 


参考资料

相关文章推荐

初识MyBatis

  • 2017年06月30日 15:44
  • 572KB
  • 下载

初识java笔记

  • 2015年08月09日 12:58
  • 715KB
  • 下载

自定义控件——初识自定义控件

本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。开发的时候,因为业务需求或者封装需要,我们会进行自定义控件。 说在前面,本篇涉及到一些东西 * onMeasure * onLa...

Robotium环境搭建和初识

  • 2015年10月26日 10:31
  • 600KB
  • 下载

以小程序初识tp5.rar

  • 2017年10月26日 21:28
  • 413KB
  • 下载

LuceneInAction(第2版)学习笔记——第一章 初识Lucene

Lucene: 是一个搜索类库,而不是完整的程序 A. 索引组件   根据原始内容创建索引 Raw Content : Acquire Content    --> Build Docu...

RecycleView初识

  • 2015年09月08日 16:54
  • 2.82MB
  • 下载

认识Windows Azure之一——初识Azure

  • 2014年08月31日 22:49
  • 211KB
  • 下载

安卓TV开发(前言)— AndroidTV模拟器初识与搭建

目前市场已经有很多巨头企业涉足物联网和智能家居领域,包括小米,乐视,华为等已经相继进军,并以开发出相应的产品。乐视智能电视,小米手环,手表,电视盒子,华为智能路由器,这些设备是怎么运行是其原理,也就是...

初识计算机网络

  • 2014年07月08日 09:51
  • 2.25MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初识字符集
举报原因:
原因补充:

(最多只允许输入30个字)