首页 > 其他 > 详细

计算机编码简析

时间:2014-03-28 20:33:03      阅读:615      评论:0      收藏:0      [点我收藏+]

计算机编码简析

目录

摘要.. 1

1.引言.. 2

1.1.计算机编码发展. 2

1.2.计算机常见编码. 2

1.3.不同环境下编码. 2

2.计算机常见字符编码介绍.. 3

2.1. ASCII 字符集. 3

2.11.定义. 3

2.12.包含内容. 3

2.13.编码方式. 3

2.2.GB2312 字符集. 4

2.21.定义. 4

2.22.包含内容. 4

2.23.编码方式. 4

3.GBK 字符集. 4

3.1定义. 5

4.BIG5 字符集. 5

4.1.定义. 5

4.2.包含内容. 5

4.3.编码方式. 5

5.GB18030 字符集. 5

5.1.定义. 5

5.2.包含内容. 6

5.3.编码方式. 6

6.ISO8859-16

7.Unicode 字符集. 6

7.1.定义. 6

7.2.包含内容. 7

7.3.编码方式. 7

8.UTF-87

9.UTF-167

10.UTF-328

3.计算机编码常见问题及编码选择.. 8

3.1.关于 Unicode 编码的一个问题. 8

3.2.UTF-16 与 UTF-8选择. 8

4.SQL中字符编码分析比较.. 9

4.1.简要说明. 9

4.2.char与varchar类型比较. 9

4.3.text编码. 9

5.参考文献.. 10

6.结论与建议.. 10

致谢.. 10

摘要

正如人们用语言在人与人之间进行交流一样,计算机编码是为了在人和机器之间进行信息转换,以便人和计算机进行有效的交流。换句话说,编码即是交流。计算机有不同的编码方式实现对不同图文、符号等的处理,以便计算机能识别和存储各种信息。计算机中字符编码就是一种常见的编码,在各种各样的计算机编码中不同的编码都是为了实现不同的目的,应用于不同的领域,因此,在计算机编程中就需要我们针对实际问题选择合适的计算机编码。

关键词:计算机编码  交流  编码方式

1.引言

1.1.计算机编码发展

1.2.计算机常见编码

在计算机中,最基础的是位(bit);接着是字节(Byte)、KB、MB、KM、GB、TB;之后出现了进制:二进制、八进制、十进制、十六进制;接着是上层建筑字符,常用的字符名称有:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。这些字符编码使得计算机能够识别和存储各种文字。

 1.3.不同环境下编码

微软默认使用的中文编码是GB2312编码。Linux默认使用UTF-8编码,UTF-8是开源的编码标准,并且支持世界绝大多数国家语言的编码,具有“万国码”之称。

Windows中窄字符就是MBCS编码,即多字节编码,如中文Windows就是GBK(这一系列GB2312,GBK,GB18030等),MBCS编码兼容ASCII码。Windows宽字符编码就是Unicode编码,采用UTF-16编码。而Linux中窄字符编码即UTF-8(可配,系统默认一般为UTF-8),而宽字符编码为UTF-32。

2.计算机常见字符编码介绍

字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多少字节表示等问题,则是由编码来决定的。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

2.1. ASCII 字符集

2.11.定义

美国信息互换标准代码,是基于罗马字母表的一套电脑编码系统,主要显示英语和一些西欧语言,是现今最通用的单字节编码系统。

2.12.包含内容

控制字符:回车键,退格,换行键等。

可显示字符:英文大小写,阿拉伯数字,西文符号。

扩展字符集:表格符号,计算符号,希腊字母,拉丁符号。

2.13.编码方式

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

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

在计算机存储单元中,一个 ASCII 码值占一个字节(8 个二进制位),最高位是用作奇偶检验位*

注:标*的奇偶校验是指在代码传送的过程中,用来检验是否出错的一种方法。奇偶校分为奇校验和偶校验。奇校验规定:正确的代码一个字节中 1 的个数必须是奇数,若非奇数则在最高位添 1;偶校验规定:正确的代码一个字节中 1 的个数必须是奇数,若非奇数,则在最高位添1。

2.2.GB2312 字符集

2.21.定义

又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集?基本集》,是中国标准的简体中文字符集,它所收录的汉字已经覆盖 99.75%的使用频率,基本满足了汉字的计算机处理需要,在中国大陆和新加坡广泛使用。

2.22.包含内容

GB2312 收录了简化汉字及一般字符,序号,数字,拉丁字母,日文假名,希腊字母,俄文字母,汉语拼音符号,汉语注音字母,共 7445 个图形字符。其中包括 6763 个汉字,一级汉字 3755 个,二级汉字 3008 个。

2.23.编码方式

GB2312 对所收汉字进行了“分区”处理,每区含有 94 个汉字或者符号,这种表示方法也叫做“区位码”。它是用双字节表示的,前面的字节为第一字节,又称“高字节”,后面的为第二字节,“低字节”。高位字节把 01-87 区的区号加上 0xA0(相当于数字 160);低位字节把 01-94区的区号加上 0xA0(相当于数字 160)。

举个简单的小例子:第一个汉字——“啊”,它的区号为 16,位号 01,则区位码是 1601。则高字节位:16+0xA0=0xB0;低字节位:01+0xA0=0xA1,所以“啊”的汉字处理编码为0xB0A1。

3.GBK 字符集

3.1定义

GBK 是 GB2312 字符集的扩展(K)(中国的中文编码表升级,融合了更多的中文文字符号),它收录了 21886 个符号,它分为汉字区和图形符号区,汉字区包括 21003 个字符。GBK 字符集主要扩展了繁体中文字的支持。

4.BIG5 字符集

4.1.定义

又称大五码,由台湾五家软件公司创立。因为当时台湾没有一个标准的字符集,而且 GB2312 又没有收录繁体字,所以才推出了 BIG5。

4.2.包含内容

BIG5 字符集共收录了 13053 个中文字,该字符集在台湾使用。但是没有考虑到社会上流通的人名,地方用字,方言用字,化学及生物科等用字,没有包含日文平假名及片假字母。

4.3.编码方式

BIG5 也采用双字节存储方法,一两个字节编码一个字。高位字节的编码范围是 0xA1-0xF9,低位字节的编码范围是 0xA1-0xFE。

5.GB18030 字符集

5.1.定义

GB18030的全称是GB18030-2000《信息交换用汉字编码字符集基本记得扩充》 。该字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。

5.2.包含内容

该标准的字符总编码空间超过 150 万个编码位,收录了 27484 个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆,香港,台湾,日本和韩国等东南亚地区信息交换多文种,大字量,多用途,统一编码格式的要求。

5.3.编码方式

GB8030 标准采用单字节,双字节和四字节三种方式对字符编码。单字节部分使用 0x00-0x7F 码(对应于 ASCII 码的相应码);双字节部分,首字节码从 0x81-0xFE,尾字节码分别是 0x40-0x7E 和 0x80-0xFE。四字节部分采用 0x30-0x39 作为双字节编码扩充的后缀,这样扩充的四字节编码,其范围是 0x81308130-0x0xFE39FE39,其中第一,三个字节编码位均为0x81-0xFE,第二,四字节部分采用GB/T 11383未采用的 0x30-0x39作为对双字节编码扩充的后缀。

6.ISO8859-1

属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。

7.Unicode 字符集

7.1.定义

Unicode 字符集编码是(University multiple-object coded character set)通用多八位编码字符集的简称。融合了多种文字,所有文字都用两个字节来表示,支持世界上超过 650 种语言的国际字符。Unicode 允许在同一服务器上混合使用不同语言,它为每种语言的每个字符设定了统一并且唯一的二进制编码,以满足跨平台,跨语言进行文本转换,处理的要求。它不兼容任何编码。相对于iso8859-1编码来说,Unicode编码只是在前面增加了一个0字节,比如字母a为"00 61"。定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而Unicode又可以用来表示所有字符,所以在很多软件内部是使用Unicode编码来处理的,比如java。

7.2.包含内容

Unicode 标准始终使用十六进制数字,固定使用 2 个字节来表示一个字符,共可以表示 65536 个字符。而且书写时在前面加上前缀“U+”,例如 A 的编码是 004116,则书写成“U+0041”。

7.3.编码方式

考虑到Unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,Unicode也需要两个字节来表示。所以Unicode不便于传输和存储。因此而产生了UTF编码,UTF编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,UTF编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,UTF编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。

注意,虽然说UTF是为了使用更少的空间而使用的,但那只是相对于Unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然UTF编码对汉字使用3个字节,但即使对于汉字网页,UTF编码也会比Unicode编码节省,因为网页中包含了很多的英文字符。

8.UTF-8

UTF8 是 Unicode 其中的一个使用方式,最多用三个字节来表示一个字符。UTF 的意思是:Unicode translation format,即把 Unicode 转作某种格式的意思。 UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。UTF-8使用可变长度字节来存储 Unicode 字符,如 ASCII 字母还是采用一个字符来存储,希腊字母等采用 2 个字符来存储,而常用的汉字要使用 3 字节,辅助平面字符则使用 4 字节。

9.UTF-16

使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码,即 2 个字节表示一个字符。

10.UTF-32

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

3.计算机编码常见问题及编码选择

3.1.关于 Unicode 编码的一个问题

使 用 记 事 本 另 存 为 时 , 可 以 在 ANSI , GBK,Unicode ,Unicode big endian 和 UTF-8 这几种编码之间相互转换。同样是 txt 文件,windows 是怎么识别编码的呢?平时注意的话可以发现 Unicode,Unicode big endian 和 UTF-8编码的 txt 文件的开头会多出几个字节,分别是(FF,FE),(FE,FF),(EF,BB,BF)。那么这些标记都是基于什么标准呢?

ANSI 字符集:ASCII 字符集,以及由此派生并兼容的字符集。

3.2.UTF-16 与 UTF-8选择

如“连通”两个字,在 UTF-16 中为:DE 8F 1A 90,两个字节决定一个汉字;在 UTF-8 中则为:E8 BF 9E E9 80 9A,即 3个字节决定一个字符。当一个软件打开一个文本时,首先是要决定这个文本究竟是使用哪种字符集的哪种编码保存的,软件一般采用三种方式来决定文本的字符集和编码:检测文件头标识,提示用户选择,根据一定的规则猜测。不同编码方式的开头字节如下:EF BB BF,UTF-8 FF FE,UTF-16,little endian FE FF UTF-16,big endianFF FE 00 00 UTF-32, little endian 00 00 FE FF UTF-32,big endian *

注:标*的endian 是指字节序,big endian(大尾)和 little endian(小尾)是 CPU 处理多字节数的不同方式。例如“汉”的 Unicode 编码是 6C49,写到文件中,如果将 6C 写在前面就是 big endian,将 49写在前面就是 little endian。

4.SQL中字符编码分析比较

4.1.简要说明

SQl中常见字符编码有char、varchar、text、nchar、nvarchar、ntext,其中nchar、nvarchar、ntext中的n代表的是National,即国际化, 也就是代表它们所使用的字符编码为Unicode。

char与nchar、varchar与nvarchar、text与ntext之间的差别都是一样的,都是加了n就代表使用Unicode编码, 当使用Unicode编码时, 所有的字符都占用两个字节,而没有加n前缀的类型, 对于英文字符和英文字符, 只会占用一个字节, 而对于其他字符(比如中文、日语等), 会占用两个字节。

4.2.char与varchar类型比较

对于char类型, SQL Server会为其预留出指定的空间, 不论其内容实际为多少, 它所占的空间都是固定的,而对于varchar类型, SQL Server会按保存的实际长度来分配空间(外加两个额外的字节空间, 以保存数据的偏移值)。  当然, 以上两种类型的定义中, 内容所占的空间都是不允许超过定义的空间的。

char与varchar进行对比, 它们的优缺点在于:

char优点:占用空间固定,在对其进行更新操作时, 不需要分配空间和移动数据, 执行速度相对较快。

char缺点:占用空间固定,可能会浪费空间, 而且在进行读取操作时, 也因此导致读取速度相对较慢。

varchar优点:占用空间随实际内容变化, 不会浪费存储空间, 在进行读取操作时, 因为不用读取多余的无内容字节空间, 所以速度相对较快。

varchar缺点:所占空间刚好是内容所占的空间, 所以在对其进行更新操作时, 会需要扩展空间, 会需要移动数据, 这样会使更新操作的速度相对较慢。

4.3.text编码

对于text类型, 由于char和nchar都有长度或空间限制(char最大长度为8000,nchar最大长度为4000), 而有些内容可能远远超出这个长度, 所以需要以另一种类型来进行存储, 也就是text(最大可存储2GB的内容)。

5.参考文献

[1]  张浩,编码的秘密 清华大学出版社 2011年10月.

[2]  余强,编码的应用 清华大学出版社 2011年8月.

6.结论与建议

从 ASCII,GB2312,GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一的处理。区分中文编码的方法是高字节的最高位不为0。

计算机使用的缺省编码方式就是计算机的内码。有的中文 Windows 的缺省内码还是 GBK,可以通过 GB18030 升级包升级到 GB1030。不过相对 GBK 新增的字符,普通人很难用到的,通常我们用 GBK 来指代中文 Windows 内码。GBK2312 的原文是区位码,从区位码到内码,需要在高字节和低字节上分别加上 A0。

只有一种编码可以适用于其他编码所不能适用的场合,它就是一种有用的编码。所以我们要根据我们的需要进行选择。

致谢

虽然这次任务只花了一周的时间,我遇到过这种问题,在网上查资料也就解决了,也没有进一步的深入进去了解和思考,老师这次提出来,我突然意识到编码对于理解计算机的内部存储处理是很有用的。做这种作业才能真正学到些东西,多谢老师对我们的高要求让我们节快乐前进的脚步。

另一方面,我们之前对编码只是一点的了解,资料也很有限,我们基本上都是在网上查找资料,在各个论坛下载资料还让网友介绍了些博客文章中,感谢博友们给我的支持。

计算机编码简析,布布扣,bubuko.com

计算机编码简析

原文:http://www.cnblogs.com/SheroBlog/p/3629773.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!