几种常见字符集与字符编码

字符集的概念php

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

  而字符集(Character set)是多个字符的集合,字符集种类较多,每一个字符集包含的字符个数不一样。网络

经常使用字符集ide

  ASCII字符集、GB2312字符集、GBK字符集、 USC-3字符集、Unicode字符集等。ui

字符编码的概念编码

  字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、天然数序列、8位组或者电脉冲),以便文本在计算机中存储和经过通讯网络的传递。spa

经常使用字符编码设计

  ASCII编码、GB2312编码、GBK编码、UFT-8编码等字符编码。code

注意:不要把字符集和字符编码二者弄混淆。虽然他们有些同名,好比ASCII有字符集也有ASCII的字符编码,他们是两个不一样的概念。orm

 

下面咱们详细讲解几种经常使用的字符集和字符编码

1 ASCII字符集和ASCII编码

  ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则能够勉强显示其余西欧语言。它是现今最通用的单字节编码系统(可是有被Unicode追上的迹象),并等同于国际标准ISO/IEC 646

ASCII字符集:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。 

ASCII编码:将ASCII字符集转换为计算机能够接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;可是7位编码的字符集只能支持128个字符,为了表示更多的欧洲经常使用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。

  ASCII的最大缺点是只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,所以只能用于显示现代美国英语(并且在处理英语当中的外来词如naïve、café、élite等等时,全部重音符号都不得不去掉,即便这样作会违反拼写规则)。而EASCII虽然解决了部份西欧语言的显示问题,但对更多其余语言依然无能为力。所以如今的苹果电脑已经抛弃ASCII而转用Unicode。

2 GBXXXX字符集和GBXXXX编码

  为了显示中文,必须设计一套编码规则用于将汉字转换为计算机能够接受的数字系统的数。

  规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一块儿时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样咱们就能够组合出大约7000多个简体汉字了。在这些编码里,还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,连在ASCII里原本就有的数字、标点、字母都通通从新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号如下的那些就叫"半角"字符了。

  上述编码规则就是GB2312GB2312GB2312-80中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎全部的中文系统和国际化的软件都支持GB2312。GB2312的出现,基本知足了汉字的计算机处理须要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名古汉语等方面出现的罕用字,GB2312不能处理,这致使了后来GBKGB 18030汉字字符集的出现。

3 GIG5字符集和BIG5编码

  Big5,又称为大五码五大码,是使用繁体中文(正体中文)社区中最经常使用的电脑汉字字符集标准,共收录13,060个汉字。中文码分为内码及交换码两类,Big5属中文内码,知名的中文交换码有CCCII、CNS11643。Big5虽普及于台湾、香港与澳门等繁体中文通行区,但长期以来并不是当地的国家标准,而只是业界标准。倚天中文系统、Windows等主要系统的字符集都是以Big5为基准,但厂商又各自增长不一样的造字与造字区,派生成多种不一样版本。2003年,Big5被收录到CNS11643中文标准交换码的附录当中,取得了较正式的地位。这个最新版本被称为Big5-2003。

BIG5编码:Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。第一个字节称为"高位字节",第二个字节称为"低位字节"。"高位字节"使用了0x81-0xFE,"低位字节"使用了0x40-0x7E,及0xA1-0xFE。在Big5的分区中:

0x8140-0xA0FE 保留给用户自定义字符(造字区)
0xA140-0xA3BF 标点符号、希腊字母及特殊符号,包括在0xA259-0xA261,安放了九个计量用汉字:兙兛兞兝兡兣嗧瓩糎。
0xA3C0-0xA3FE 保留。此区没有开放做造字区用。
0xA440-0xC67E 经常使用汉字,先按笔划再按部首排序。
0xC6A1-0xC8FE 保留给用户自定义字符(造字区)
0xC940-0xF9D5 次经常使用汉字,亦是先按笔划再按部首排序。
0xF9D6-0xFEFE 保留给用户自定义字符(造字区)

4 Unicode字符集和UTF编码

Unicode字符集的由来:

  为了适合当地语言和字符,设计和实现相似GB232/GBK/GB18030/BIG5的编码方案。这样各搞一套,在本地使用没有问题,一旦出如今网络中,因为不兼容,互相访问就出现了乱码现象。为了解决这个问题,一个伟大的创想产生了——Unicode。

Unicode编码系统为表达任意语言的任意字符而设计。它使用4字节的数字来表达每一个字母、符号,或者表意文字(ideograph)。每一个数字表明惟一的至少在某种语言中使用的符号。(并非全部的数字都用上了,可是总数已经超过了65535,因此2个字节的数字是不够用的。)被几种语言共用的字符一般使用相同的数字来编码,除非存在一个在理的语源学(etymological)理由使不这样作。

UTF编码:

UTF-8:UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年建立。如今已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上能够同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

UTF-16:UTF-16是Unicode字符编码五层次模型的第三层:字符编码表(Character Encoding Form,也称为 "storage format")的一种实现方式。即把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。Unicode字符的码位,须要1个或者2个16位长的码元来表示,所以这是一个变长表示。

UTF-32:UTF-32 (或 UCS-4)是一种将Unicode字符编码的协定,对每个Unicode码位使用刚好32位元。其它的Unicode transformation formats则使用不定长度编码。由于UTF-32对每一个字符都使用4字节,就空间而言,是很是没有效率的。特别地,非基本多文种平面的字符在大部分文件中一般很罕见,以至于它们一般被认为不存在占用空间大小的讨论,使得UTF-32一般会是其它编码的二到四倍。虽然每个码位使用固定长定的字节看似方便,它并不如其它Unicode编码使用得普遍。

5 MBCS编码

  为了扩充ASCII编码,以用于显示本国的语言,不一样的国家和地区制定了不一样的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来表明一个字符的各类汉字延伸编码方式,称为 ANSI 编码,又称为"MBCS(Muilti-Bytes Charecter Set,多字节字符集)"。在简体中文系统下,ANSI 编码表明 GB2312 编码。因此在中文 windows下要转码成gb2312,gbk只须要把文本保存为ANSI 编码便可。

注:其中每一个语言下的ANSI编码,都有一套一对一的编码转换器,Unicode变成全部编码转换的中间介质。全部的编码都有一个转换器能够转换到Unicode,而Unicode也能够转换到其余全部的编码。

6 base64编码

  有的电子邮件系统(好比国外信箱)不支持非英文字母(好比汉字)传输,这是历史缘由形成的(认为只有美国会使用电子邮件?)。由于一个英文字母使用ASCII编码来存储,占存储器的1个字节(8位),实际上只用了7位2进制来存储,第一位并无使用,设置为0,因此,这样的系统认为凡是第一位是1的字节都是错误的。而有的编码方案(好比GB2312)不但使用多个字节编码一个字符,而且第一位常常是1,因而邮件系统就把1换成0,这样收到邮件的人就会发现邮件乱码。
  为了能让邮件系统正常的收发信件,就须要把由其余编码存储的符号转换成ASCII码来传输。好比,在一端发送GB2312编码->根据Base64规则->转换成ASCII码,接收端收到ASCII码->根据Base64规则->还原到GB2312编码。
相关文章
相关标签/搜索