当前位置:文档之家› 字符编码

字符编码

字符编码

字符编码学习资料。

目录

字符编码 (1)

目录 (2)

第一章字符与编码 (3)

1.1字符与编码的概念 (3)

1.2字符编码的发展历史。 (3)

1.3字符、字节、字符串与编码。 (5)

1.4常用字符编码简介 (6)

第二章字符编码详述 (8)

2.1 ASCII (8)

2.2 EASCII (9)

2.3 UCS (10)

2.4 Unicode (10)

2.5 UTF (11)

2.5.1 UTF-8 (12)

2.5.2 UTF-16 (13)

2.5.2 UTF-32 (13)

2.6 汉字编码 (13)

2.6.1 GB2312 (13)

2.6.2 BIG5 (14)

2.6.3 GB18030 (16)

2.6.3 GBK (17)

第三章字符编码与程序 (21)

3.2 程序、操作系统中的内码外码 (21)

3.2 C++与JAVA中的编码 (22)

3.2.1 C++中相关实现方法 (22)

3.2.2 JAVA中相关实现方法 (23)

第四章乱码及解决 (27)

4.1 因误解招致的乱码 (27)

4.2 非UNICODE程序在不同语言环境间移植时产生的乱码 (27)

4.3 网页提交字符串招致的乱码 (28)

4.4 从数据库读取字符串招致的乱码 (28)

4.5 电子邮件中的字符串乱码 (28)

4.6 “半个汉字”引发的乱码 (29)

4.7 全角半角转换引起的乱码 (29)

第五章编码转换及问题 (31)

5.1 编码识别 (31)

5.2 UTF8←→GBK (31)

5.2 不同浏览器下 (31)

第一章字符与编码

计算机中的信息包括数据信息和控制信息,数据信息又可分为数值和非数值信息。非数值信息和控制信息包括了字母、各种控制符号、图形符号等,它们都以二进制编码方式存入计算机并得以处理,这种对字母和符号进行编码的二进制代码称为字符代码(Character Code)。

1.1字符与编码的概念

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

字符集(Character set)是多个字符的集合。一组抽象字符的集合就是字符集。字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。字符集的子集也是字符集。

字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

字符编码(Character Code):计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码。制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,会确定用几个字节来编码。

具有数字编码的字符在信息处理中,所使用的整数总有上限,依赖于存储整数的位的数目。这也决定了可以同时区分的字符的数量。在设计字符集时,首先要决定所需字符的数目,并确定所需字符的清单。根据字符的数目,可以设定整数值的上限,这个整数范围称为编码空间(code space),其中的一个特定整数称为一个码点(c ode point)。然后,为字符清单中的每个字符指定一个整数值,也就是一个码点。这样就得到一个字符集,称作编码字符集(Coded Character Set)。

每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Chara cter Set),这是字符集的另外一个含义。通常所说的字符集大多是这个含义。

1.2字符编码的发展历史。

在最初的时候,美国人制定了第一张编码表《美国标准信息交换码》,简称ASCII,来支持英文。这是字符编码发展的阶段1.

美国人解决英文问题了,但欧洲人、中国人、韩国人、日本人都没解决问题,于是就各自开发了自己语言的字符编码,世界范围内就多了诸如ISO 8859、GB2312、BIG5、JIS 等局限于某个国家或地区使用的本地化编码标准,这些编码标准被统称为:ANSI编码。这是字符编码发展的阶段2.这些ANSI编码有一些共同的特点:

1) 每种ANSI编码或者说ANSI字符集只规定自己国家或地区使用的语言所需的'字符';比如中文GB-2312编码中就不会包含韩国人的文字。

2) ANSI字符集的空间都比ASCII要大很多,一个字节已经不够,绝大多数都使用了多字节的存储方案。

3) ANSI编码一般都会兼容ASCII码。

虽然有了各地区的编码,但各自不兼容,甚至于大陆简体中文的GB2312和台湾繁体中文的BIG5相互就出现乱码,于是在80年代就有了一个称为UNICODE 的组织,这个组织制定了一个能够覆盖几乎任何语言的编码表,在Unicode3.0.1中就包含了49194 个字符,将来,Unicode 中还会增加更多的字符。Unicode 的全称是Universal Multiple-Octet C oded Character Set ,简称为UCS。这是字符编码发展的阶段3。

由于要表示的字符如此之多,所以一开始的Unicode1.0编码就使用连续的两个字节也就是一个WORD 来表示编码,比如“汉”的UCS 编码就是6C49。这样在Unicode 的编码中就可以表示256*256 = 65536 种符号了。

直接使用一个WORD 相当于两个字节来保存编码可能是最为自然的Unicode 编码的方式,这种方式被称为UCS-2,也被称为ISO 10646,,在这种编码中,每

一个字符使用两个字节来进行表示,例如,“中”使用11598 来编码,而大写字母 A 仍然使用65 表示,但它占用了两个字节,高位用0 来进行补齐。

UCS-2 虽然理论上可以统一编码,但仍然面临着现实的困难。首先,UCS-2 不能与现有的所有编码兼容,现有的文档和软件必须针对Unicode 进行转换才能使用。即使是英文也面临着单字节到双字节的转换问题。其次,许多国家和地区已经以法律的形式规定了其所使用的编码,更换为一种新的编码不现实。比如在中国大陆,就规定GB2312 是大陆软件、硬件编码的基础。第三,现在还有使用中的大量的软件和硬件是基于单字节的编码实现的,UCS-2 的双字节表示的字符不能可靠的在其上工作。

为了尽可能与现有的软件和硬件相适应,美国人又制定了一系列用于传输和保存Unicode 的编码标准UTF,这些编码称为UCS 传输格式码,也就是将UCS 的编码通过一定的转换,来达到使用的目的。常见的有UTF-7,UTF-8,UTF-16等。

其中UTF-8 编码得到了广泛的应用。实际上,ASCII 字符用UTF-8 来表示后,与ASCII 是完全一样的,UTF-8 编码解决了字符的编码问题,又可以在现有的设备上通行,因此,得到了广泛的使用。美国人又近水楼台的把自己的问题解决了。但其他的编码就没有这么幸运了。

XML 的设计目标是实现跨网络,跨国界的信息表示,所以,在XML 设计之初,就规定XML 文件的默认编码格式就是UTF-8,也就是说,如果没有特殊的说明,X ML文件将被视为UTF-8 编码。

然而,大部分的中文编辑软件,是根据操作系统来决定编码的方式的,所以,在写字板中直接输入并保存的文件,将被保存为GB2312 编码,所以,在读出XML 文件内容时,往往就会出现文件错误的提示了。这种情况会出现在文件中有中文出现的时候,如果没有中文,只有英文信息,就不会出现问题。原因很简单,有中文时,因为中文的编码并不是UTF-8 编码,所以会造成冲突,没有中文时,英文的编码在GB2312 中与ASCII是兼容的,而ASCII 与UTF-8 是完全一致的,所以不会出现问题。这种情况也包括UltraEdit 软件。

但时,专业的XML编辑软件会自动将内容保存为UTF-8 编码,不会有问题。

在通过DOM或XSLT保存XML 文件时也有着同样的问题。

默认情况下,XML 的处理程序一般会将内容作为UTF-8 编码进行处理,所以保存下来的XML 文件必须要用可以识别UTF-8 的软件来进行查看,如Windows 的记事本。

1.3字符、字节、字符串与编码。

字符串在内存中的存放方法:

在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS )。比如,"Bob123" 在内存中为:

42 6F 62 31 32 33 00

B o b 1 2 3 \0

在使用 ANSI 编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS ),因此,这种方式存放的字符也被称作多字节字符。比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:

D6 D0 CE C4 31 32 33 00

中 文 1 2 3 \0 在 UNICODE 被采用之后,计算机存放字符串时,改为存放每个字符在 UNIC ODE 字符集中的序号。目前计算机一般使用 2 个字节(16 位)

来存放一个序号(D BCS ),因此,这种方式存放的字符也被称作宽字节字符。比如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序号:

2D 4E 87 65 31 00 32 00 33 00 00 00 ← 在 x86 CPU 中,低字节在前

中 文 1 2 3 \0

一共占 10 个字节。

由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字

符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。

1.4常用字符编码简介

第二章字符编码详述

在本章中,我将详细论述各个具体的编码,他们所包括的内容及特点。

2.1 ASCII

ASCII码于1968年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。

ASCⅡ码表.xls

名称由来

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是由美国国家标准局(ANSI)制定,目前计算机中用得最广泛的字符集及其编码。它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

特点

它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。

包含内容

因为1位二进制数可以表示2种状态:0、1;而2位二进制数可以表示4种状态:00、01、10、11;依次类推,7位二进制数可以表示128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符,其中有96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有32 个控制字符。

第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

技术特征

单字节编码,7位(bits)表示一个字符,共128字符。编码空间:0x0~0x7F 共8bit

在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b 7) 在计算机内部通常保持为0 ,在数据传输时可用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高

位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

注:EBCDIC码(扩展的BCD交换码):一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统(MVS 、OS/390等)采用EB CDIC 编码。

2.2 EASCII

EASCII(Extended ASCII,延伸美国标准信息交换码) 是将ASCII码由7位扩充为8位而成,又叫ASCII扩展字符集。EASCII的内码是由0到255共有256个字符组成。EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。

由于标准ASCII 字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了ISO2022 标准,它规定了在保持与ISO646 兼容的前提下将ASCII 字符集扩充为8 位代码的统一方法。ISO 陆续制定了一批适用于不同地区的扩充ASCII 字符集,每种扩充ASCII 字符集分别可以扩充128 个字符,这些扩充字符的编码均为高位为 1 的8 位代码(即十进制数128~255 ),称为扩展ASCII 码(EASCII),具体由ISO 8859进行了规范:

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

ASCII收录了空格及94个“可印刷字符”,足以给英语使用。但是,其他使用拉丁字母的语言(主要是欧洲国家的语言),都有一定数量的变音字母,故可以使用ASCII 及控制字符以外的区域来储存及表示。除了使用拉丁字母的语言外,使用西里尔字母的东欧语言、希腊语、泰语、现代阿拉伯语、希伯来语等,都可以使用这个形式来储存及表示。

* ISO 8859-1 (Latin-1) - 西欧语言

* ISO 8859-2 (Latin-2) - 中欧语言

* ISO 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。

* ISO 8859-4 (Latin-4) - 北欧语言

* ISO 8859-5 (Cyrillic) - 斯拉夫语言

* ISO 8859-6 (Arabic) - 阿拉伯语

* ISO 8859-7 (Greek) - 希腊语

* ISO 8859-8 (Hebrew) - 希伯来语(视觉顺序)

* ISO 8859-8-I - 希伯来语(逻辑顺序)

* ISO 8859-9 (Latin-5 或Turkish) - 它把Latin-1的冰岛语字母换走,加入土耳其语字母。

* ISO 8859-10 (Latin-6 或Nordic) - 北日耳曼语支,用来代替Latin-4。

* ISO 8859-11 (Thai) - 泰语,从泰国的TIS620 标准字集演化而来。

* ISO 8859-13 (Latin-7 或Baltic Rim) - 波罗的语族

* ISO 8859-14 (Latin-8 或Celtic) - 凯尔特语族

* ISO 8859-15 (Latin-9) - 西欧语言,加入Latin-1欠缺的法语及芬兰语重音字母,以及欧元符号。

* ISO 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。

很明显,iso8859编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859编码来表示。而且在很多协议上,默认使用该编码。

2.3 UCS

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

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

* UCS-2: 与unicode的2byte编码基本一样。

* UCS-4: 4byte编码, 目前是在UCS-2前加上2个全零的byte。

Unicode与UCS的关系:

ISO 与https://www.doczj.com/doc/0912001168.html,是两个不同的组织, 因此最初制定了不同的标准; 但自从unicode2.0开始, unicode采用了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持一致.

2.4 Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码,由http:/ /https://www.doczj.com/doc/0912001168.html,制定,要将全世界常用文字都函括进去。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。但自从unicode2.0开始,unicode采用了与ISO 10646-1相同的字库和字码,ISO也承诺ISO10646将不会给超出0x10FFFF的UC S-4编码赋值,使得两者保持一致。

Unicode的编码方式与ISO 10646的通用字符集(Universal Character Set,U CS)概念相对应,目前的用于实用的Unicode版本对应于UCS-2,使用16位的编码空间:也就是每个字符占用2个字节,基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

名称由来

Unicode字符集编码是Universal Multiple-Octet Coded Character Set通用多八位编码字符集的简称,是由一个名为Unicode 学术学会(Unicode Consortiu m)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理

及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2005年3月3 1日的Unicode 4.1.0。

特征

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

编码方法

Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,例如字母“A”的编码为004116 和字符“?”的编码为20AC16。所以“A”的编码书写为“U+0 041”。

出现原因与缺陷

世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。为什么电子邮件和网页都经常会出现乱码,就是因为信息的提供者和信息的读取者使用了不同的编码方式。如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码的意义。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,“汉”这个字的Unicode编码是U+6C49。Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。

2.5 UTF

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

Unicode的实现方式称为Unicode转换格式(Unicode Translation Format,简称为UTF)。

为什么要转换成某种格式呢?转换是为了传输和交换。一种好的UTF-x方案应该便于在不同的计算机之间使用网络传输不同语言和编码的文字,使得标准双字节的U nicode能够在现存的处理单字节的系统上正确传输。目前比较常见的UTF方案有三种:

UTF-16:其本身就是标准的Unicode编码方案,又称为UCS-2,它固定使用16 bits(两个字节)整数来表示一个字符。

UTF-32:又称为UCS-4,它固定使用32 bits(四个字节)整数来表示一个字符。

UTF-8:最广泛的使用的UTF方案,UTF-8使用可变长度字节来储存Unicode

字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。UT

F-8更便于在使用Unicode的系统与现存的单字节的系统进行数据传输和交换。与前两个方案不同:UTF-8以字节为编码单元,没有字节序的问题。

UTF有三种方案,那么如何在接收数据和存储数据时识别数据和指导识别数据采用的是哪个方案呢?在UTF编码方案中有一个叫做"ZERO WIDTH NO-BREAK SP ACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输或存储中。UCS规范建议我们在传输或存储字节流前,先传输字符" ZERO WIDTH NO-BREAK SPACE"。这样根据识别前面的"ZERO WIDTH NO-BR EAK SPACE"即可识别编码方案:

EF BB BF UTF-8

FE FF UTF-16/UCS-2, little endian

FF FE UTF-16/UCS-2, big endian

FF FE 00 00 UTF-32/UCS-4, little endian.

00 00 FE FF UTF-32/UCS-4, big-endian.

UTF与unicode的关系:

Unicode是一个字符集, 可以看作为内码.

而UTF 是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.

2.5.1 UTF-8

UTF-8 的全名是UCS Transformation Format 8, 即UCS 编码的8位传输格式,就是使用单字节的方式对UCS 进行编码,使Unicode 编码能够在单字节的设备上正常进行处理。

UTF-8是8bit变长编码,便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输,同时提高Unicode的编码效率(UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了)。

UTF-8使用可变长度字节来储存Unicode字符,对于常用字符集(ASCII中0~1 27字符)继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的朝鲜和汉语会意文字就要使用3字节。辅助平面字符则使用4字节。UTF-8编码

UTF-8的编码是这样得出来的,以”汉”这个字为例:“汉”字的Unicode编码是U +00006C49,然后把U+00006C49通过UTF-8编码器进行编码,最后输出的UTF-8编码是E6B189。

UTF-8 编码是变长的编码,对不同的Unicode 可能编成不同的长度

UCS-2 UTF-8

0000-007F 0- 127 0xxxxxxx

0080-07FF 128- 2047 110xxxxx 10xxxxxx

0800-FFFF 2048-65535 1110xxxx 10xxxxxx 10xxxxxx

例如 1 的Unicode 编码是31 00,在0-127之间,所以转换后即为31,而“中”字的UTF-8 Unicode 编码为11598,转换成UTF-8则为e4 b8 ad。

2.5.2 UTF-16

UTF-16:16bit编码,是变长码,大致相当于20位编码,值在0到0x10FFFF

之间,基本上就是unicode编码的实现,与CPU字序有关。UTF-16 使用一个或两个未分配的16 位代码单元的序列对Unicode 代码点进行编码。

2.5.2 UTF-32

UTF-32 即将每一个Unicode 代码点表示为相同值的32 位整数。

2.6 汉字编码

GB2312字集是简体字集,全称为GB2312(80)字集,共包括国标简体汉字6763个。

BIG5字集是港台繁体字集,共包括国标繁体汉字13053个。

GBK字集是简繁字集,包括了GB字集、BIG5字集和一些符号,共包括21003个字符。

GB18030是国家制定的一个强制性大字集标准,全称为GB18030-2000,它的推出使汉字集有了一个“大一统”的标准。

2.6.1 GB2312

GB2312(信息交换用汉字编码字符集)是由我国国家标准总局1980年发布,1 981年5月1日开始实施的一套国家标准,标准号是GB2312—1980。它是计算机可以识别的编码,适用于汉字处理、汉字通信等系统之间的信息交换。基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。

这个码是唯一的,不会有重码字。把换算成十六进制的区位码加上2020H,就得到国标码。国标码加上8080H,就得到常用的计算机机内码。

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

信息交换用汉字编码字符集和汉字输入编码之间的关系是,根据不同的汉字输入方法,通过必要的设备向计算机输入汉字的编码,计算机接收之后,先转换成信息交换用汉字编码字符,这时计算机就可以识别并进行处理;汉字输出是先把机内码转成汉字编码,再发送到输出设备。

编码空间94*94=8836,是双字节编码。编码范围为:高字节: 0xB0~0xF7 ,低字节: 0xA0~0xFE

名称的由来

GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施。

特点

GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

包含内容

GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共7445 个图形字符。其中包括67 63个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

技术特征

(1)分区表示:

GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。

各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。

(2)双字节表示

在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。

每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。

“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

编码举例

以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:区位码=区字节+位字节(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。

2.6.2 BIG5

BIG5是通行于台湾、香港地区的一个繁体字编码方案。虽然存在一些瑕疵,但广泛应用于电脑行业,尤其是互联网中,从而成为一种事实上的行业标准。

1983年10月,台湾国家科学委员会、教育部国语推行委员会、中央标准局、行政院共同制定了《通用汉字标准交换码》,后经修订于1992年5月公布,更名为《中文标准交换码》,BIG5是台湾资讯工业策进会根据以上标准制定的编码方案。

BIG5码是双字节编码方案,其中第一个字节的值在OXAO-OXFE之间,第二个字节在OX40-OX7E和OXA1-OXFE之间。

BIG5收录13461个汉字和符号,包括:

* 符号408个,编码位置A140-A3BE

* 常用字5401个,编码位置A440-C67E,包括台湾教育部颁布的《常用国字标准字体表》的全部汉字4808个,台湾教科书常用字587个,异体字6个。

* 次常用字7652个,编码位置C940-F9D5,包括台湾教育部颁布的《次常用国字标准字体表》的全部汉字6341个,《罕用国字标准字体表》中使用频率较高的字1 311个。

名称的由来

又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁(Acer)、神通(MiTAC)、佳佳、零壹(Zero One)、大众(FIC)创立,故称大五码。

Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。

特点

Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。耐人寻味的是该字符集重复地收录了两个相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0 xDDFC)。

字符编码方法

Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。高位字节的编码范围0xA1-0xF9,低位字节的编码范围0x40-0x7E及0xA1-0xFE。

各编码范围对应的字符类型如下:0xA140-0xA3BF为标点符号、希腊字母及特殊符号,另外于0xA259-0xA261,存放了双音节度量衡单位用字:兙兛兞兝兡兣嗧瓩糎;0xA440-0xC67E为常用汉字,先按笔划再按部首排序;0xC940-0xF9D5为次常用汉字,亦是先按笔划再按部首排序。

Big5 的局限性

没有一个真正统一的汉字编码表

(1)BIG-5定义的13053个汉字,没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字、没有包含日文平假名及片假名字母。“游锡堃”和“游锡方方土”

例如台湾视“着”为“著”的异体字,故没有收录“着”字。康熙字典中的一些部首用字

(如“亠”、“疒”、“辵”、“癶”等)、常见的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也没有收录到Big5之中。

(2)增补字集混乱:倚天Big5延伸、Big5+、Big-5E、Big5-2003…

(3)增补方案互不兼容

被unicode取代是必然

2.6.3 GB18030

名称的由来

GB 18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准

多字节字符集,编码空间160万

单字节:0x0~0x7F

双字节:高字节:0x81~0xFE 低字节:0x40~0x7E 0x80~0xFE(兼容G

BK)

四字节:第1、3字节:0X81~0XFE 第2、4字节:0X30~0X39

特点:

与gbk完全兼容,除了:欧元(€) GB18030 中A2 E3, 在GBK中是0x80

囊括汉字、日文假名、朝鲜语和中国少数民族文字

GB18030目前的最新版本是GB18030-2005。GB18030-2005与GB18030-200 0的编码体系结构是完全相同的。GB18030-2005相对于GB18030-2000主要有以下变化:

1、在四字节字符表中增加CJK统一汉字扩充B和已经在GB13000中编码的我国少数民族文字字符的字形。其实GB18030-2000已经映射了这些码位,但GB180 30-2000没有给出这些字符的字形。

2、调整字符 的编码。

3、去掉了单字节编码的欧元符号(0x80)。

特点

GB 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。

GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了2 7484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312,GB13000.1)兼容。

编码方法

GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分使用0×00至0×7F码(对应于ASCII码的相应码)。双字节部分,首字节码从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。四字节部分采用GB/T 1 1383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×FE39FE39。其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。

包含的内容

双字节部分收录内容主要包括GB13000.1全部CJK汉字20902个、有关标点符号、表意文字描述符13个、增补的汉字和部首/构件80个、双字节编码的欧元符号等。四字节部分收录了上述双字节字符之外的,包括CJK统一汉字扩充A在内的GB 13000.1中的全部字符。

2.6.3 GBK

GBK 是又一个汉字编码标准,全称《汉字内码扩展规范》(GBK),英文名称C hinese Internal Code Specification ,中华人民共和国全国信息技术标准化技术委员会1995 年12 月 1 日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995 年12 月15 日联合以技监标函[1995] 229 号文件的形式,将它确

定为技术规范指导性文件,发布和实施。这一版的GBK 规范为 1.0 版。GB 即“国标”,K 是“扩展”的汉语拼音第一个字母。

GBK 向下与GB2312 编码兼容,向上支持ISO 10646.1 国际标准,是前者向后者过渡过程中的一个承上启下的标准。ISO 10646 是国际标准化组织ISO 公布的一个编码标准,即Universal Multilpe-Octet Coded Character Set(简称UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与Unicode 组织的Unicode 编码完全兼容。ISO 10646.1 是该标准的第一部分《体系结构与基本多文种平面》。我国1993 年以GB 13000.1 国家标准的形式予以认可(即GB 13000.1 等同于ISO 10646.1)。

GBK编码空间:23940,

字节范围:

单字节:0x00-0x7F

双字节: 高字节:0x81~0xFE (0x80 欧元符号€ )

低字节:0x40~0x7E 0x80~0xFE

低字节在0x40~0x7E的汉字都是一些生僻字符

GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了2100 3个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准G B13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定,1995年12月正式发布,目前中文版的WIN95、WIN98、W INDOWS NT以及WINDOWS 2000、WINDOWS XP等都支持GBK编码方案。

字汇:GBK 规范收录了ISO 10646.1 {ISO 10646 是一个包括世界上各种语言的书面形式以及附加符号的编码体系。其中的汉字部分称为“CJK 统一汉字”(C 指中国,J 指日本,K 指朝鲜)。而其中的中国部分,包括了源自中国大陆的GB 2312、GB 12345、《现代汉语通用字表》等法定标准的汉字和符号,以及源自台湾的CNS 11 643 标准中第1、2 字面(基本等同于BIG-5 编码)、第14 字面的汉字和符号。}中的全部CJK 汉字和符号,并有所补充。具体包括:

1. GB 2312 中的全部汉字、非汉字符号。

2. GB 13000.1 中的其他CJK 汉字。以上合计20902 个GB 化汉字。

3. 《简化字总表》中未收入GB 13000.1 的52 个汉字。

4. 《康熙字典》及《辞海》中未收入GB 13000.1 的28 个部首及重要构件。

5. 13 个汉字结构符。

6. BIG-5 中未被GB 2312 收入、但存在于GB 13000.1 中的139 个图形符号。

7. GB 12345 增补的 6 个拼音符号。

8. 汉字“○”。

9. GB 12345 增补的19 个竖排标点符号(GB 12345 较GB 2312 增补竖排标点符号29 个,其中10 个未被GB 13000.1 收入,故GBK 亦不收)。

10. 从GB 13000.1 的CJK 兼容区挑选出的21 个汉字。

11. GB 13000.1 收入的31 个IBM OS/2 专用符号。

码位分配及顺序:GBK 亦采用双字节表示,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间,剔除xx7F 一条线。总计23940 个码位,共收入21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。

全部编码分为三大部分:

1. 汉字区。包括:

a. GB 2312 汉字区。即GBK/2: B0A1-F7FE。收录GB 2312 汉字676

3 个,按原顺序排列。

b. GB 13000.1 扩充汉字区。包括:

(1) GBK/3: 8140-A0FE。收录GB 13000.1 中的CJK 汉字6080 个。

(2) GBK/4: AA40-FEA0。收录CJK 汉字和增补的汉字8160 个。CJK

汉字在前,按UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。

2. 图形符号区。包括:

a. GB 2312 非汉字符号区。即GBK/1: A1A1-A9FE。其中除GB 2312 的符号外,还有10 个小写罗马数字和GB 12345 增补的符号。计符号717 个。

b. GB 13000.1 扩充非汉字区。即GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“○”排列在此区。计符号166 个。

3. 用户自定义区:分为(1)(2)(3)三个小区。

(1) AAA1-AFFE,码位564 个。

(2) F8A1-FEFE,码位658 个。

(3) A140-A7A0,码位672 个。

第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。

字形:GBK 对字形作了如下的规定:

1. 原则上与GB 13000.1 G列(即源自中国大陆法定标准的汉字)下的字形/笔形保持一致。

2. 在CJK 汉字认同规则的总框架内,对所有的GBK 编码汉字实施“无重码正形”(“GB 化”);即在不造成重码的前提下,尽量采用中国新字形。

3. 对于超出CJK 汉字认同规则的、或认同规则尚未明确规定的汉字,在GBK 码位上暂安放旧字形。这样,在许多情况下GBK 收入了同一汉字的新旧两种字形。

4. 非汉字符号的字形,凡GB 2312 已经包括的,与GB 2312 保持一致;超出GB 2312 的部分,与GB 13000.1 保持一致。

5. 带声调的拼音字母取半角形式。

ANSI和Unicode big endia:

我们在Windows系统中保存文本文件时通常可以选择编码为ANSI、Unicode、Unic ode big endian和UTF-8,这里的ANSI和Unicode big endia是什么编码呢? ANSI:

使用2个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码。

在简体中文系统下,ANSI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码。

Unicode big endia:

UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。

Unicode规范中推荐的标记字节顺序的方法是BOM(即Byte Order Mark)。

在UCS编码中有一个叫做ZERO WIDTH NO-BREAK SPACE的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。

UCS规范建议我们在传输字节流前,先传输字符ZERO WIDTH NO-BREAK SPAC E。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。

因此字符ZERO WIDTH NO-BREAK SPACE又被称作BOM。

Windows就是使用BOM来标记文本文件的编码方式的。

常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、...

ASCII ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。 GB2312 GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。 区位码中01-09区是符号、数字区,16-87区是汉字区,10-15和88-94是未定义的空白区。它将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。一级汉字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。 GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1A1-0xF7FE。 EUC-CN可以理解为GB2312的别名,和GB2312完全相同。 区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。HZ和ISO- 2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间来支持汉字。区位码和GB2312编码的关系有点像Unicode和UTF-8。 GBK GBK编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。同GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的汉字部首符号、竖排标点符号等字符。 GBK的整体编码范围是为0x8140-0xFEFE,不包括低字节是0×7F的组合。高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE。

数据编码方式介绍

1.Base64 这里讨论的编码主要的目的是将不可显示的二进制数组转变为可显示的字符串,包括其逆运算。通过特定的协议传输数据,或者加密解密的时候都会用到类似的方法。在这类运算中用的比较多的是Base64,比如MIME中,DotNET中更是直接提供了Base64 Encode和Decode的方法,相当方便。但是Base64通常由“a-z”、“A-Z”、0-9以及“+”和“=”这些符号组成,当中包含了很多混淆的字符,例如“1”、“I”和“l”,“0”和“O”或者“2”和“Z”,看起来总是不爽。特别是当作为序列号编码时,是不应该包含容易混淆的字母,所以有另一种编码形式叫做Base24,用过MS产品的兄弟们一定非常熟悉。但是Base24在实现上还要多绕一个弯,先放一放,我们在下面说Base32,能够基本满足要求的,又非常直观的编码方式。Base32的原理和Base64一模一样,所以先看一下Base64编码是怎么一回事。 Base64顾名思义就是用64个可显示字符表示所有的ASC字符,64也就是6Bits,而ASC字符一共有256个,也就是8Bits,很简单了,取一下最小公约数,24位,言下之意就是用4个Base64的字符来表示3个ASC字符。即在编码时,3个一组ASC字符,产生4个Base64字符,解码时4个一组,还原3个ASC字符。根据这个原理Base64编码之后的字符串应该比原先增加1/3的长度。 这里所谓的编码就是一次取6Bits,换算出来的值作为索引号,利用这个索引数,到预先定义的长度为64的字符数组中取相应的字符替换即可;解码就是逆运算,根据字符取在预定义数组中的索引值,然后按8Bits一组还原ASC字符。 Base32和Base64相比只有一个区别就是,用32个字符表示256个ASC字符,也就是说5个ASC字符一组可以生成8个Base32字符,反之亦然。 2.Base32 2.1.Base32数据编码简介 Base32数据编码机制,主要用来把二进制数据编码成可见的字符串,其编码规则是:任意给定一个二进制数据,以5个位(bit)为一组进行切分(base64以6个位(bit)为一组),对切分而成的每个组进行编码得到1个可见字符。Base32编码表字符集中的字符总数为25=32个,这也是Base32名字的由来。以下是我在网上找的一个标准的Base32编码表,如表1所示。

计算机常见编码

计算机常见编码 一.有关编码的基础知识 1. 位bit 最小的单元 字节byte 机器语言的单位 1byte=8bits 1KB=1024byte 1MB=1024KB 1GB=1024MB 2. 二进制binary 八进制octal 十进制decimal 十六进制hex 3. 字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符 号,数字等。 字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。 字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一 个字符用多少字节表示等问题,则是由编码来决定的。计算机要 准确的处理各种字符集文字,需要进行字符编码,以便计算机能 够识别和存储各种文字。 二.常见字符集的编码介绍: 常见的字符集有:ASCII 字符集,GB2312 字符集,BIG5 字符集,GB18030 字符集,Unicode 字符集,下面一一介绍: 1. ASCII 字符集: 定义: 美国信息互换标准代码,是基于罗马字母表的一套电脑编码系统,主要显示 英语和一些西欧语言,是现今最通用的单字节编码系统。 包含内容: 控制字符(回车键,退格,换行键等) 可显示字符(英文大小写,阿拉伯数字,西文符号) 扩展字符集(表格符号,计算符号,希腊字母,拉丁符号) 编码方式: 第0-31 号及127 号是控制字符或通讯专用字符; 第32-126 号是字符,其中48-57 号为0-9 十个阿拉伯数字,65-90 号为26 个 大写英文字母,97-122 号为26 个英文小写字母,其余为一些标点符号,运 算符号等。 在计算机存储单元中,一个ASCII 码值占一个字节(8 个二进制位),最高位 是用作奇偶检验位。【奇偶校验是指:在代码传送的过程中,用来检验是否 出错的一种方法。】奇偶校验分为奇校验和偶校验。奇校验规定:正确的代 码一个字节中1 的个数必须是奇数,若非奇数,则在最高位添1;偶校验规 定:正确的代码一个字节中 1 的个数必须是奇数,若非奇数,则在最高位添 1。

字符编码方式介绍及编码方式测试

第一部分编码方式介绍 一、编码: 美国标准信息交换标准码( , ) 在计算机内部,所有地信息最终都表示为一个二进制地字符串.每一个二进制位()有和两种状态.一个字节()共由八个二进制位来组成,共有种状态,从到. 阿拉伯数字、英文字母、标点符号等这些字符,怎么定义才能让计算机识别呢?因为计算机只识别二进制位和,所以以上这些字符就必须与二进制位(和)建立关系,才能让计算机识别. 年代初,计算机界制定了一套统一地字符编码,来表示字符与二进制位之间地关系.这种统一地字符编码就叫做编码.码一共规定了个字符地编码,比如空格是(二进制),大写地字母是(二进制).这个符号(包括个不能打印出来地控制符号),只占用了一个字节地后面位,最前面地位统一规定为. 在英语国家,个编码足以表达所有字符,但其它非英语国家,字符不是由英文字符组成,这样就需要增加编码以表达这些字符,对于超过个字符地编码被称为非编码.比如:在中国,我们用简体中文,字符编码方式为.个人收集整理勿做商业用途 二、编码: 看到上面地介绍后,我们了解了最早编码是码.它只用个二进制位来表示,由于那个时期生产地大多数计算机使用位大小地字节,因此用户不仅可以存放所有可能地字符,而且有整整一位空余下来.如果你技艺高超,可以将该位用做自己离奇地目地:中那个发暗地灯泡实际上设置这个高位,以指示一个单词中地最后一个字母,同时这也宣示了只能用于英语文本. 由于字节有多达位地空间,因此许多人在想:“呀!我们可以把之间地编码用做个人地应用目地.”问题在于,同时产生这种想法地人相当多,而且在之间地各个位置上应该存放什么这一问题上,真是仁者见仁智者见智.事实上,只要人们开始在美国以外地地方购买计算机,那么各种各样地不同字符集都会进入规划设计行列,并且各人都会根据自己地需要使用高位地个字符.如此一来,甚至在同语种地文档之间就不容易实现互换. 可被扩展,最优秀地扩展方案是,通常称之为.包括了足够地附加字符集来写基本地西欧语言. 最后,这个人参与地终于以标准地形式形成文件.在标准中,每个人都认同如何使用低端地个编码,这与相当一致.不过,根据所在国籍地不同,处理编码以上地字符有许多不同地方式.这些不同地系统称为代码页. 同时,甚至更为令人头疼地事情正在逐步上演,亚洲国家地字符表有成千上万个字符,这样地字符表是用位二进制无法表示地.该问题地解决通常有赖于称为(,双字节字符集)地繁杂字符系统. 不过,仍然需要指出一点,多数人还是姑且认为一个字节就是一个字符,以及一个字符就是个二进制位,并且只要确保不将字符串从一台计算机移植到另一台计算机,或者说一种以上地语言,那么这几乎总是可以凑合.当然,只要一进入,从一台计算机向另一台计算机移植字符串就成为家常便饭了,而各种复杂状况也随之呈现出来.令人欣慰地是,随即问世了.个人收集整理勿做商业用途 字符集(简称为),国际标准组织于年月成立工作组,针对各国文字、符号进行统一性编码.年美国跨国公司成立,并于年月与达成协议,采用同一编码字集.目前是采用位编码体系,其字符集内容与地()相同.于年月通过(),目前版本于公布,内容包含符号个,汉字个,韩文拼音个,造字区个,保留个,共计个.编码后地大小是一样地.例如一个英文字母"" 和一个汉字"好",编码后都是占用地空间大小是一样地,都是两个字节!个人收集整理勿做商业用途 可以用来表示所有语言地字符,而且是定长双字节(也有四字节地)编码,包括英文字

常用字符集介绍和编码转换原理

常用字符集介绍和编码转换原理 目录 1. GB2312编码介绍 (2) 1.1 基本信息 (2) 1.2 GB标准 (2) 1.3 分区表示 (2) 1.4 字节结构 (2) 2. 通用字符集UCS (3) 2.1 定义 (3) 2.2 概要 (3) 2.3 实现级别 (3) 2.4 与UNICODE的兼容关系 (3) 3. unicode编码介绍 (3) 3.1 基本简介 (4) 3.2 编码实现 (4) 3.2.1 编码方式 (4) 3.2.2 实现方式 (5) 4. UTF-8介绍 (5) 4.1 基本介绍 (5) 4.2 编码原理 (5) 4. 转换原理 (7)

1. GB2312编码介绍 1.1 基本信息 1.2 GB标准 GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集·基本集》,又称为GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。 GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。 GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。 对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。 1.3 分区表示 GB 2312中对所收汉字进行了―分区‖处理,每区含有94个汉字/符号。这种表示方式也称为区位码。 01-09区为特殊符号。 16-55区为一级汉字,按拼音排序。 56-87区为二级汉字,按部首/笔画排序。 10-15区及88-94区则未有编码。 举例来说,―啊‖字是GB2312之中的第一个汉字,它的区位码就是1601。 1.4 字节结构

信息交换用汉字编码字符集

〇信息交换用汉字编码字符集--基本集〈—即国家标准 GB2312-80 从1975年开始,我国为了研究汉字的使用频度,进行了大规模的字频统计工作,内容包括工业、农业、军事、科技、政治、经济、文学、艺术、教育、体育、医药卫生、天文地理、自然、化学、文字改革、考古等多方面的出版物,在数以亿计的浩瀚文献资料中,统计出实际使用的不同的汉字数为6335个,而其中有3000多个汉字的累计使用频度达到了99.9%,而另外的3000多个累计频度不到0.1%,说明了常用汉字与次常用汉字的数量不足7000个,这就为国家制定汉字库标准提供了依据。 1980年颁布了〇信息交换用汉字编码字符集—基本集〈的国标交换码,国家标准号为:GB2312-80,选入了6763个汉字,分为两级,一级字库中有3755个,是常用汉字,二级字库中有3008个,是次常用汉字;还选入了682个字符,包含有数字、一般符号、拉丁字母、日本假名、希腊字母、俄文字母、拼音符号、注音字母等。以前我国大陆的各种中文DOS版本、Windows3.1 /3.2版本,装入的字库都是国标一二级字库。 〇GB2312-80〈对 7445 个图形字符作了二进制数编码,这些图形字符是: 6763 个汉字,字体为简化字,分成两级。第一级汉字 3755 个,按拼音排序,约占近代文献汉字累计使用频度 99.9% 左右;二级汉字 3008 个,按部首、笔画排序。一、二级汉字约占累计使用频度 99.99% 以上。 202 个一般符号。其中包括 1.~20.,(1)~(20),?~?,(-)~(+) 等。 22 个数字。其中 0~9 共 10 个,‥~‰ 共 12 个。 52 个拉丁字母。其中大写字母A~Z 26 个,小写字母a~z 26 个。 169 个日文假名。其中平假名 83 个,片假名 86 个。 48 个希腊字母。其中大写字母Α~Χ24 个,小写字母α~ω24 个。 66 个俄文字母。其中大写字母А~Я33 个,小写字母а~я 33 个。 26 个汉语拼音符号,包括带声调符号和其它符号的字母。 37 个汉语注音字母,?~ㄗ。 GB2312简体中文编码表 code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A1A0 、。? í ì ¨ 〃?—~‖ … ‘ ’ A1B0 “ ” 【】々〆〇〈〉《》「〒〓」『 A1C0 a ? ? ? ?  ̄ ? ? ? ? ‵ ? ? ? ? ※ A1D0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A1E0 ? ? ? ? ? ? ? $¤ ??? § ? ? ? A1F0 ? ? ? ? ? ? ? ? ? ? ″ ? ′ ? 』 code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A2A0 ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ A2B0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

字符编码

1、什么是字符编码,为什么要字符编码? 2、区分“字符集”和“编码” 3、几种常用的字符编码。 首先介绍一下拉丁字母: 拉丁字母,也叨罗马字母,是当仂丐界上使用最广的字母系统。 拉丁字母,戒者说基本的拉丁字母,就是你所常见的到的ABCD 等26 个英文字母。 原先是欧洲那边使用的,后来由亍欧洲殖民主义,导致后来的美洲等地,也是用的这套字 母体系。 而其他有些地方,比如越南等,本来有自己的文字语言的,结果受西斱文化的影响和由亍 基督教的传播,也用拉丁字母了。 所以总的说,现在欧洲多数国家,美洲,澳洲,非洲的多数国家,都是用的拉丁字母,即 你所常见的英文字母,也是拉丁字母。而中国的汉语拼音,也是用的这个拉丁字母。 那字符编码是什么? 计算机中存放的都是0 和1 的二进制值。8 个位对应一个字节,常用16 迚制来表示。 而我们普通用户所希望看到的是,计算机把其所存储的对应的16 迚制的数值,转化为对 应的字符,包括英文和中文等其他语言的字符,然后输出到屏幕上。而所谓编码,就是,定义了一套规则,去指定,哪些数值,对应着哪些字符。举个最简单的例子,常见65=0x41 对应的是大写字母A,97=0x61 对应的是小写字母a,而这套数值和字母之间的映射兰系,说白了,就是一套规则,就叫做字符编码,即我们常说 的ASCII 编码。 所以字符编码就是:定义了一套规则,指定了计算机中存放的这么多值中的哪个值,对应 了电脑屏幕显示出来的哪个字母。 区分一下“字符集”和“编码” 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。 各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。 区分一下“字符集”和“编码”的概念很重要,因为有的字符集有多种“编码”实现。 下面介绍几种具体的字符编码。 大致按照它们出现的先后顺序进行介绍。 计算机刚出现的旪候,虽然是美国人发明的,但是也要面对一个问题,即如何将对应的计 算机中的数值,转化为对应的字母,而显示出来,即采用什么样的规则,而当时,各个厂

各种文字编码简介常见的编码都有介绍

各种文字编码简介 ASCII ASCII码是7位编码,编码范围是0×00-0×7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0×00-0×20和0×7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。 GB2312 GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。 区位码中01-09区是符号、数字区,16-87区是汉字区,10-15和88-94是未定义的空白区。 它将收录的汉字分成两级: 第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。一级汉字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。GB2312的编码范围是 0xA1-0×7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1-0xF7FE。 EUC-CN可以理解为GB2312的别名,和GB2312完全相同。

中文字符集

最近一直被这个字符集问题,弄的头疼。想不到一个很好的办法去解决。问题是这样的:“在超链接中传递参数的时候总是出现乱码”在Action中用debug查的时候就是乱码,在Tomcat 中把Service.xml将字符集改成UTF-8,GBK,GB2312都试过了,仍然没有解决这个问题。很是郁闷!~~~ 在现实工作中我们会经常遇到字符转换的问题:有的时候还会出现乱码.因为工作需要我从别人的静态网页上抓取数据.用到的方法是传一个uri进去,然后取出你所想得到的字符串.代码如下: public static String getData(String url1) throws Exception { String result = ""; URL url = new URL(url1); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); PrintWriter out = new PrintWriter(connection.getOutputStream()); out.close(); BufferedReader in = new BufferedReader(new InputStreamReader(connection. getInputStream(),"UTF-8")); //特别注意这里,后面的编码格式,一般都是用UTF-8,因为这是通用的.如果用汉字可以用GBK.不要用gb2312.因为它是GBK的子集. String line; while ( (line = in.readLine()) != null) { result = result + "\n" + line; } in.close(); String html =replaceFunc2(replaceFunc2(result,""); return html; } public static String replaceFunc2(String str_source, String str_start,String str_end) { String info = "", rep_str = "", rep_str2 = ""; int startFlag = 0, endFlag = 0; startFlag = str_source.indexOf(str_start); endFlag = str_source.indexOf(str_end); info = str_source; if (startFlag >= 0 && endFlag >= 0 && startFlag < endFlag) { rep_str = info.substring(0, startFlag); rep_str2 = info.substring(endFlag + str_end.length()); info = rep_str + rep_str2; } // System.out.print("==========="+info+"=========="); return info; }

中文字符集、编码

前言
由于工作的需要,参考了好多资料整理出来一份计算机汉字处理报告,不敢独享,希 望与大家共享。Ziggler 现代计算机技术虽然先进, 但大多数人只知录入 GB-2313 字符集内的 6763 个简体汉字, 对包含 21003 个简繁体汉字的 GBK 字符集的文字录入、字体 显示就已不甚了解(市面上 绝大多数所谓的繁体字体,其实采用的是 GB2313 字符集简体字的编码,用字体显示为繁体 字,而不是直接用 GBK 字符集中繁体字 的编码,错误百出) 。而汉字总数至少有近 10 万 个,目前计算机能处理的,也有 70244 个,已非一般人所能知能用了。 由于汉字总数非常庞大。 汉字总共有多少字?到目前为止, 恐怕没人能够答得上来精确 的数字。据估计,汉字数量达到 11 万左右。 这里所说的七万多汉字, 是指 UNICODE 超大字集全部七万多中日韩汉字。 (注: Unicode 是指用两个字节表示每个字符的字符编码方案。 ) 那一般计算机能够显示多少个汉字呢?比如大陆这边普遍安装简体 Windows 系统,而 简体 windows 以宋体为系统字型,宋体支持 GBK 编码,所以能显示 20902 个汉字。 要显示 71564 个汉字, 可以采取多种方案, 如: 宋体-方正超大字符集+新细明体 EXTB、 宋体-方正超大字符集+中易宋体 EXTB、宋体 GB18030+新细明体 ExtB、宋体 18030+宋体 ExtB 等等。
中文字符集、编码
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符 集是多个字符的集合,字符集 种类较多,每个字符集包含的字符个数不同。 计算机要准确的处理各种字符集文字, 需要进行字符编码, 以便计算机能够识别和存储 各种文字。 中文文字数目大, 而且还分为简体中文和繁体中文两种不同书写规则的文字, 而计算机 最初是按英语单字节字符设计的, 因此, 对中文字符进行编码, 是中文信息交流的技术基础。 以下是常见的一些字符集介绍,部分字符集中包括编码介绍。
GB2312 字符集
1.名称的由来 GB2312 又称为 GB2312-80 字符集,全称为《信息交换用汉字编码字符集·基本集》 ,由原中 国国家标准总局发布,1981 年 5 月 1 日实施。 2.特点 GB2312 是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖 99.75%的使用频率,

Unicode字符编码分布表――标点符号类

Unicode 5.1字符编码分布表——标点符号类标点符号数学符号专用符号 通用标点符号数字和数字符号综合符号控制符集合: C0(U+00–U+001F,U+007F)、C1(U+0080–U+009F)ASCII标点符号(U+0020 –U+002F,U+003A– U+0040,U+005B–(相关查阅: 专用文字) U+0060,U+007B– U+007E)xx盲文(U+2800 排版控制符(U+2000–U+206F)–U+28FF) 拉丁文第一增补集标点符 装饰符号(U+2700 - 号(U+00A0–ASCII数字(U+0030–U+0039)不可见操作符(U+2061–U+2064)U+27BF) U+00BF) 通用标点符号(U+2000全角ASCII数字(U+FF11– –U+206F)U+FF19) 增补标点符号(U+2E00数字形式符号(U+2150– –U+2E7F)U+218F)综合符号(U+2600– 专用符号(U+FFF0–U+FF)U+26FF)

综合符号和箭头 (U+2B00– U+2BFF) 《xx经》符号 (U+1D300– U+1D35F)语言标签(U+E00–U+E007F)中日韩标点符号上标和下标符号(U+2070– U+209F)变体选择符(U+FE00–U+FE0F)中日韩标点符号 类字母符号 (U+3000–U+303F)《易经》两仪四象 (U+268A– U+268F) 增补变体选择符(U+E0100–U+E01EF) 【译注】《xx》八卦 (U+2630– U+2637) 《xx》六十四卦象 (U+4DC0– U+4DFF) 全角ASCII标点符号 (U+FF01–U+FF0F,

汉字信息编码标准

1.国家标准汉字代码体系 ??汉字字数繁多,属性丰富,因而汉字代码体系也较复杂,包括: ??(1)汉字机内码。它们是汉字在计算机汉字系统内部的表示方法,是计算机汉字系统 的基础代码。 ??(2)汉字交换码。它们是国标汉字(如机内码)进行信息交换的代码标准。 ??(3)汉字输入码。它们是在计算机标准键盘上输入汉字用到的各种代码体系。 ??(4)汉字点阵码。它们是在计算机屏幕上显示和在打印机上打印输出汉字的代码体系。??(5)汉字字形控制码。为了打印各种风格的字体和字形所制定的代码。 ??这些代码系统有的必须有统一的国家标准,有的则不要求统一。近年来我国已经制定 系列汉字信息处理方面的国家标准,今后将继续完善,并与国际上求得统一。 2. 国家标准汉字交换码 ??我国制定了“中华人民共和国国家标准信息交换汉字编码”,标准代号为GB2312—80,这种编码又称为国标码。在国标码的字符集中共收录了一级汉字3755个,二级汉字3008 个,图形符号682个,三项字符总计7445个。 ??在国标GD2312—80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个“区”,编号为01区到94区,每一列称为一个“位”,编号为01 位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是3624,表明它在方阵的36区24位,问号“?”的区位码为0331,则它在03区3l位。 ??所有的汉字和符号所在的区分为以下四个组: ? ? (1)01区到15区。图形符号区,其中01区到09区为标准符号区,10区到15区为 自定义符号区。 ??01区到09区的具体内容如下; ??1)01区。一般符号202个,如间隔符、标点、运算符、单位符号及制表符; ??2)02区。序号60个,如1.~20.、(1)~(20)、①~⑩及(一)~(十); ??3)03区。数字22个,如0—9及X一XII,英文字母52个,其中大写A—Z、小写 a—z各26个; ??4)04区。日文平假名83个; ??5)05区。日文片假名86个; ??6)06区。希腊字母48个; ??7)07区。俄文字母66个; ??8)08区。汉语拼音符号a—z26个; ??9)09区。汉语拼音字母37个。 ? ? (2)16区到55区。一级常用汉字区,包括了3755个一统汉字。这40个区中的汉字是按汉语拼音排序的,同音字按笔划顺序排序。其中55区的90一94位未定义汉字。 ? ? (3)56区到87区。二级汉字区,包括了3008个二级汉字,按部首排序。 ? ? (4)88区到94区。自定义汉字区。 ? ? 第10区到第15区的自定义符号区和第88区到第94区的自定义汉字区可由用户自行??定义国标码中未定义的符号和汉字。 3. 国家标准汉字机内码

(国内标准)国标(GB)汉字编码对照表

汉字编码简明对照表 说明: 1、下列汉字取自国标(GB 2312-80)中的分级与排列内容;包含所有的第一级汉字和第二级汉字中的常用部分。 2、第一级汉字(16—55区的汉字)以拼音字母为序进行排列,同音字以笔形顺序横、竖、撇、捺、折为序,起笔相同的按第二笔,依次类推;第二级汉字(56-87区的汉字)按部首为序进行排列。 3、对于多音字,仅在表中出现一次。如:柏,音(bai,bo),表中仅出现在“bai”中。 4、汉字区位码用阿拉伯数字表示,每个汉字对应4个数字。 5、本汉字代码表摘自《字符集和信息编码国家标准汇编》,(中国标准出版社,1998年编)。 a 啊 1601 阿 1602 吖 6325 嗄 6436 腌 7571 锕 7925 ai 埃 1603 挨 1604 哎 1605 唉 1606 哀 1607 皑 1608 癌 1609 蔼 1610 矮 1611 艾 1612 碍 1613 爱 1614 隘 1615 捱 6263 嗳 6440 嗌 6441 嫒 7040 瑷 7208 暧 7451 砹 7733 锿 7945 霭 8616 an 鞍 1616 氨 1617 安 1618 俺 1619 按 1620 暗 1621 岸 1622 胺 1623 案 1624 谙 5847 埯 5991 揞 6278 犴 6577 庵 6654 桉 7281 铵 7907 鹌 8038 黯 8786 ang 肮 1625 昂 1626 盎 1627 ao

凹 1628 敖 1629 熬 1630 翱 1631 袄 1632 傲 1633 奥 1634 懊 1635 澳 1636 坳 5974 拗 6254 嗷 6427 岙 6514 廒 6658 遨 6959 媪 7033 骜 7081 獒 7365 聱 8190 螯 8292 鏊 8643 鳌 8701 鏖 8773 ba 芭 1637 捌 1638 扒 1639 叭 1640 吧 1641 笆 1642 八 1643 疤 1644 巴 1645 拔 1646 跋 1647 靶 1648 把 1649 耙 1650 坝 1651 霸 1652 罢 1653 爸 1654 茇 6056 菝 6135 岜 6517 灞 6917 钯 7857 粑 8446 鲅 8649 魃 8741 bai 白 1655 柏 1656 百 1657 摆 1658 佰 1659 败 1660 拜 1661 稗 1662 捭 6267 呗 6334 掰 7494 ban 斑 1663 班 1664 搬 1665 扳 1666 般 1667 颁 1668 板 1669 版 1670 扮 1671 拌 1672 伴 1673 瓣 1674 半 1675 办 1676 绊 1677 阪 5870 坂 5964 钣 7851 瘢 8103 癍 8113 舨 8418 bang 邦 1678 帮 1679 梆 1680 榜 1681 膀 1682 绑 1683 棒 1684 磅 1685 蚌 1686 镑 1687 傍 1688 谤 1689 蒡 6182 浜 6826 bao 苞 1690 胞 1691 包 1692 褒 1693 剥 1694 薄 1701 雹 1702 保 1703 堡 1704 饱 1705 宝 1706 抱 1707 报 1708 暴 1709 豹 1710 鲍 1711 爆 1712 葆 6165 孢 7063 煲 7650 鸨 8017 褓 8157 趵 8532 龅 8621 bei 杯 1713 碑 1714 悲 1715 卑 1716 北 1717 辈 1718 背 1719 贝 1720 钡 1721 倍 1722 狈 1723 备 1724 惫 1725 焙 1726 被 1727 孛 5635 陂 5873 邶 5893 蓓 6177 悖 6703 碚 7753 鹎 8039 褙 8156 鐾 8645 鞴 8725 ben 奔 1728 苯 1729 本 1730 笨 1731 畚 5946 坌 5948 贲 7458 锛 7928 beng 崩 1732 绷 1733 甭 1734 泵 1735 蹦 1736 迸 1737 嘣 6452 甏 7420 bi

西文字符的编码

一、西文字符的编码 1.西文字符集:由拉丁字母、数字、标点符号及一些特殊符号组成。 2.字符的编码:字符集中每一个字符各有一个代码,即字符的二进制表示,称为该字符的编码。 3.字符代码表:字符集中不同字符的编码互相区别,构成该字符集的代码表。 4.ASCII字符集和ASCII码 1)美国标准信息交换码(American Standard Code for Information Interchange):使用7个二进 位对字符进行编码(叫做标准ASCII码),称为ISO-646标准。 2)基本的ASCII字符集共有128个字符,96个可打印字符(常用字母、数字、标点符号等)32个控 制字符,特殊字符的ASCII码空格(32)、A(65)、a(97)、0(48) ●数字,字母的ASCII码是连续的,对应大小写字母ASCII码相差32。 ●不同类型的ASCII码的十进制数值由小到大:数字、大写字母、小写字母 3)汉字的编码(一) ●GB2312-80汉字编码

A.第一部分:字母、数字和各种符号,包括拉丁字母、俄文、日文平假名与片假名、希腊字母、汉 语拼音等共682个(统称为GB2312图形符号) B.第二部分:一级常用汉字,共3755个,按汉语拼音排列 C.第三部分:二级常用字,共3008个,按偏旁部首排列 ?区位码:GB2312国标字符集构成一个二维平面,它分成94行、94列,行号称为区号,列号称为位号。每一个汉字或符号在码表中都有各自的位置,字符的位置用它所在的区号(行号)及位号(列号)来表示。每个汉字的区号和位号分别用1个字节来表示{如:“大”字的区号20,位号83,区位码是20 83 用2个字节表示为:00010100 01010011} 4)国标交换码: ●问题:信息通信中,汉字的区位码与通信使用的控制码(00H~1FH)发生冲突。解决方案:为 了避免汉字区位码与通信控制码的冲突,ISO2022规定,每个汉字的区号和位号必须分别加上32(20H)得到国标交换码。

常用字符集编码详解:ASCII、GB2312、GBK、GB18030、...

ASCII ASCII 码是7位编码,编码范围是0x00-0x7F ASCII 字符集包括英文字母、 阿拉伯数字和标点符号等字符。其中 0x00-0x20和0x7F 共33个控制字符。 只支持ASCI 码的系统会忽略每个字节的最高位,只认为低 7位是有效位。 HZ 字符编码就是早期为了在只支持 7位ASCII 系统中传输中文而设计的编码。 早期很多邮件系统也只支持ASCII 编码,为了传输中文邮件必须使用 BASE64或 者其他编码方式。 GB2312 GB2312是基于区位码设计的,区位码把编码表分为 94个位,每个字符的区号和位号组合起来就是该汉字的区位 码。 10进制数来表示,如 1601就表示 16区1 位,对应的字符是 区号和位号上分别加上0xA0就得到了 GB2312编 码。 区位码中 01-09区是符号、数字区, 16-87区是汉字区, 未定义的空白区。它将收录的汉字分成两级: 第一级是常用汉字计 3755 个,置于 16-55 区,按汉语拼音字母 /笔形顺序排 列;第二级汉字是次常用汉字计 3008 个,置于 56-87 区,按部首 /笔画顺序排 列。一级汉字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中 的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片 假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以 用繁体汉字测试某些系统是不是只支持 GB2312编码。 GB2312的编码范围是0xA1-0x7E 去掉未定义的区域之后可以理解为实际 编码范围是 0xA1-0xF7FE 。 EUC-CN 可以理解为GB2312的别名,和GB2312完全相同。 区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而 94个区,每个区对应 区位码一般用 “啊”。在区位码的 10-15和 88-94是

字符编码简介:ASCII,Unicode,UTF-8,GB2312

字符编码简介:ASCII,Unicode,UTF-8,GB2312 字符编码简介:ASCII,Unicode,UTF-8,GB2312 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 2、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (?),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。 中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

编码问题

字符编码问题 编码方式: 一.iso8859-1(latin1) a)一个字节一个字符英文字母 二.gb2312 - gbk a)2个字节一个字符 gbk原生的兼容iso8859-1 三.Utf-8 - unicode字符集 3个字节一个字符兼容iso8859-1,不兼容其他码表 四.乱码:编码和解码用的码表不一样,也就是编码解码方式不一样 1.基础知识 计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码。 字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系

统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。 2.常用字符集和字符编码 常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。 2.1. ASCII字符集&编码 ASCII(A merican S tandard C ode for I nformation I nterchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII 则可以勉强显示其他西欧语言。它是现今最通用的单字节编码系统(但是有被Unicode追上的迹象),并等同于国际标准ISO/IEC 646。 ASCII字符集:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。 ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;但是7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。ASCII字符集映射到数字编码规则如下图所示: 图1 ASCII编码表 图2 扩展ASCII编码表 ASCII的最大缺点是只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,因此只能用于显示现代美国英语(而且在处理英语当中的外来词如na?ve、café、élite等等时,所有重音符号都不得不去掉,即使这样做会违反拼写规则)。而EASCII虽然解决了部份西

相关主题
文本预览
相关文档 最新文档