2022年2022年计算机中的字符编码 .pdf
《2022年2022年计算机中的字符编码 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机中的字符编码 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机中的字符编码0.字符与编码的发展.1 0.1 字符,字节,字符串.2 0.2 字符集与编码 .3 1.ASCII 码.4 2.非 ASCII 编码.5 3.Unicode.5 3.1 Unicode 的问题 .5 4.UTF-8.6 4.1 Unicode 与 UTF-8 之间的转换 .6 4.2 Little endian 和 Big endian.7 4.3 实例.8 4.4 关于 BOM.8 5.GB2312.9 0.字符与编码的发展从计算机对多国语言的支持角度看,大致可以分为三个阶段:系统内码说明系统阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。
2、英文 DOS 阶段二ANSI 编码(本地化)为使计算机支持更多语言,通常使用 0 x800 xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 中 在中文操作系统中,使用 0 xD6,0 xD0 这两个字节存储。不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS 等各自的编码标准。这些使用2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段ANS
3、I 编码的文本中。中 文DOS,中 文Windows 95/98,日文 Windows 95/98 阶段三UNICODE(国际化)为了使国际间信息交流更加方便,国际组织制定了UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。Windows NT/2000/XP,Linux,Java 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 9 页 -字符串在内存中的存放方法:在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如,Bob123 在内存中为:42 6F 62 31 32 33 00
4、 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 被采用之后,计算机存放字符串时,改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节(16 位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。比如,字符串 中文 12
5、3 在 Windows 2000 下,内存中实际存放的是 5 个序号:2D 4E 87 65 31 00 32 00 33 00 00 00 在 x86 CPU 中,低字节在前中文1 2 3 0 一共占 10 个字节。0.1 字符,字节,字符串理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:概念描述举例字符人们使用的记号,抽象意义上的一个符号。1,中,a,$,¥,字节计算机中存储数据的单元,一个8 位的二进制数,是一个很具体的存储空间。0 x01,0 x45,0 xFA,ANSI 字符串在内存中,如果“字符”是以ANSI 编码形式存在的,一个字符可
6、能使用一个字节或多个字节来表示,那么我们称这种字符串为ANSI 字符串或者多字节字符串。中文 123(占 7 字节)UNICODE 字符串在内存中,如果“字符”是以在UNICODE 中的序号存在的,那么我们称这种字符串为UNICODE 字符串或者宽字节字符串。L中文 123(占 10 字节)由于不同ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须 知道 它采用 的是 哪一 种编码 规则,才 能够 知道它 包含 了哪 些“字符”。而对于UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。名师资料总结-精品资料欢迎下载-名师精心整理-第
7、2 页,共 9 页 -0.2 字符集与编码各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:(1)使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”;(2)规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312,GBK,JIS 等,除了有“字符的
8、集合”这层含义外,同时也包含了“编码”的含义。“UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8,UTF-7,UTF-16,UnicodeLittle,UnicodeBig 等简单介绍一下常用的编码规则,为后边的章节做一个准备。在这里,我们根据编码规则的特点,把所有的编码分成三类:分类编码标准说明单 字 节 字符编码ISO-8859-1 最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,0 xD6,0 xD0 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 0 x00D6,0
9、 x00D0 两个 UNICODE 字符,即?D。反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0255 范围的字符。ANSI 编码GB2312,BIG5,Shift_JIS,ISO-8859-2,把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如,0 xD6,0 xD0 这两个字节,通过 GB2312 转化为字符串时,将得到 0 x4E2D 一个字符,即 中 字。“ANSI 编码”的特点:1.这
10、些“ANSI 编码标准”都只能处理各自语言范围之内的UNICODE 字符。2.“UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。UNICODE 编码UTF-8,UTF-16,UnicodeBig,与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节或多个字节。与“ANSI 编码”不同的是:1.这些“UNICODE 编码”能够处理所有的 UNICODE 字符。2.“UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。我们实际上没有必要去深究每一种编码具体把某一个字符编码成了哪几个字节,我们
11、只需要知道“编码”的概念就是把“字符”转化成“字节”就可以了。对于“UNICODE 编名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 9 页 -码”,由于它们是可以通过计算得到的,因此,在特殊的场合,我们可以去了解某一种“UNICODE 编码”是怎样的规则。1.ASCII 码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有 0 和 1 两种状态,因此八个二进制位就可以组合出256 种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256 种不同的状态,每一个状态对应一个符号,就是256 个符号,从0000000 到
12、 11111111。上个世纪60 年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII 码,一直沿用至今。ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。ASCII 第一次以规范标准的型态发表是在1967 年,最后一次更新则是在1986 年,至今为止共定义了128 个字元,其中 33 个字元无法显示(这是以现今作业系统为依归
13、,但在 DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit 符号),且这 33 个字元多数都已是陈废的控制字元,控制字元的用途主要是用来操控已经处理过的文字,在33 个字元之外的是95个可显示的字元,包含用键盘敲下空白键所产生的空白字元也算1 个可显示字元(显示为空白)。标准的 ASCII 码表如下所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 9 页 -2.非 ASCII 编码英语用 128 个符号编码就够了,但是用来表示其他语言,128 个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高
14、位编入新的符号。比如,法语中的 的编码为130(二进制 10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256 个符号。但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130 在法语编码中代表了,在希伯来语编码中却代表了字母Gimel(?),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0127 表示的符号是一样的,不一样的只是128255 的这一段。至于亚洲国家的文字,使用的符号就更多了,汉字就多达10 万左右。一个字节只能表示 256 种符号,肯定是不够的,就必须使用多个字节
15、表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。中文编码的问题放在后面讨论。这里需指出,虽然都是用多个字节表示一个符号,但是GB 类的汉字编码与后文的Unicode 和 UTF-8 是毫无关系的。3.Unicode 正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都
16、纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。Unicode 当然是一个很大的集合,现在的规模可以容纳100 多万个符号。每个符号的编码都不一样,比如,U+0639 表示阿拉伯字母Ain,U+0041 表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询Unicode.org,或者专门的汉字对应表。Unicode 的学名是 Universal Multiple-Octet Coded Character Set,简称为UCS。UCS 可以看作是 Unicode Character
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年计算机中的字符编码 2022 计算机 中的 字符 编码
限制150内