Unicode、UTF-8与GB2312等编码之间是如何转换的_第1页
Unicode、UTF-8与GB2312等编码之间是如何转换的_第2页
Unicode、UTF-8与GB2312等编码之间是如何转换的_第3页
Unicode、UTF-8与GB2312等编码之间是如何转换的_第4页
Unicode、UTF-8与GB2312等编码之间是如何转换的_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?(.字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识。不注意的人可能对这个不在意,但这些名词有时候实在让人迷惑,对想学习计算机知识的人来说,搞懂它也十分重要,我也是在学习中慢慢了解了一些这方面的知识。1. AASCIII码 在计计算机内内部,所所有的信信息最终终都表示示为一个个二进制制的字符符串。每每一个二二进制位位(biit)有有0和11两种状状态,因因此八个个二进制制位就可可以组合合出2556种状状态,这这被称为为一个字字节(bbytee)。也也就是说说,一个个字节一一共可以以

2、用来表表示2556种不不同的状状态,每每一个状状态对应应一个符符号,就就是2556个符符号,从从000000000到11111111111。上个世纪纪60年年代,美美国制定定了一套套字符编编码,对对英语字字符与二二进制位位之间的的关系,做了统统一规定定。这被被称为AASCIII码,一直沿沿用至今今。ASCIII码一一共规定定了1228个字字符的编编码,比比如空格格“SPPACEE”是332(十十进制的的32,用二进进制表示示就是00010000000),大写的的字母AA是655(二进进制01100000011)。这这1288个符号号(包括括32个个不能打打印出来来的控制制符号),只占占用了一一

3、个字节节的后面面7位,最前面面的1位位统一规规定为00。下面面是截图图:具体体的可以以到这个个网页上上去查下下:2、非AASCIII编码码英语用1128个个符号编编码就够够了,但但是用来来表示其其他语言言,1228个符符号是不不够的。比如,在法语语中,字字母上方方有注音音符号,它就无无法用AASCIII码表表示。于于是,一一些欧洲洲国家就就决定,利用字字节中闲闲置的最最高位编编入新的的符号。比如,法语中中的的的编码为为1300(二进进制10000000100)。这这样一来来,这些些欧洲国国家使用用的编码码体系,可以表表示最多多2566个符号号。但是,这这里又出出现了新新的问题题。不同同的国家家

4、有不同同的字母母,因此此,哪怕怕它们都都使用2256个个符号的的编码方方式,代代表的字字母却不不一样。比如,1300在法语语编码中中代表了了,在在希伯来来语编码码中却代代表了字字母Giimell (),在在俄语编编码中又又会代表表另一个个符号。但是不不管怎样样,所有有这些编编码方式式中,001227表示示的符号号是一样样的,不不一样的的只是11282555的这一一段。至于亚洲洲国家的的文字,使用的的符号就就更多了了,汉字字就多达达10万万左右。一个字字节只能能表示2256种种符号,肯定是是不够的的,就必必须使用用多个字字节表达达一个符符号。比比如,简简体中文文常见的的编码方方式是GGB2331

5、2,使用两两个字节节表示一一个汉字字,所以以理论上上最多可可以表示示2566x2556=6655336个符符号。3.Unnicoode正如上一一节所说说,世界界上存在在着多种种编码方方式,同同一个二二进制数数字可以以被解释释成不同同的符号号。因此此,要想想打开一一个文本本文件,就必须须知道它它的编码码方式,否则用用错误的的编码方方式解读读,就会会出现乱乱码。为为什么电电子邮件件常常出出现乱码码?就是是因为发发信人和和收信人人使用的的编码方方式不一一样。解解释:同同一个文文本文件件,假设设内容是是用英语语写的,在英语语编码的的情况下下,每个个字符会会和一个个二进制制数对应应(如000100100

6、00类似似),然然后存到到计算机机中,这这时把这这个英语语文件发发给一个个俄语国国家的用用户,计计算机传传输的是是二进制制流,即即01001之类类的数据据,到了了俄语用用户这方方,需要要有它的的俄语编编码方式式进行解解码,把把每个二二进制流流转为字字符显示示,由于于俄语编编码表中中对每串串二进制制流数据据的解释释方式不不同,同同一个数数据如00010010000在英英语中可可能代表表A,而而在俄语语中则代代表B,这样就就会产生生乱码,这是我我个人的的理解。GB23312编编码、日日文编码码等也是是非unnicoode编编码,是是要通过过转换表表(coodeppagee)转换换成unnicood

7、e编编码的,要不怎怎么显示示出来呢呢?可以想象象,如果果有一种种编码,将世界界上所有有的符号号都纳入入其中。每一个个符号都都给予一一个独一一无二的的编码,那么乱乱码问题题就会消消失。这这就是UUniccodee,就像像它的名名字都表表示的,这是一一种所有有符号的的编码。Uniccodee当然是是一个很很大的集集合,现现在的规规模可以以容纳1100多多万个符符号。每每个符号号的编码码都不一一样,比比如,UU+06639表表示阿拉拉伯字母母Ainn,U+00441表示示英语的的大写字字母A,U+44E255表示汉汉字“严严”。具具体的符符号对应应表,可可以查询询或者专专门的4. UUniccode

8、e的问题题需要注意意的是,Uniicodde只是是一个符符号集,只是一一种规范范、标准准,它只只规定了了符号的的二进制制代码,却没有有规定这这个二进进制代码码应该如如何存储储在计算算机上。比如,汉汉字“严严”的uuniccodee是十六六进制数数4E225,转转换成二二进制数数足足有有15位位(10001111000010001001),也就是是说这个个符号的的表示至至少需要要2个字字节。表表示其他他更大的的符号,可能需需要3个个字节或或者4个个字节,甚至更更多。这里就有有两个严严重的问问题,第第一个问问题是,如何才才能区别别uniicodde和aasciii?计计算机怎怎么知道道三个字字节表

9、示示一个符符号,而而不是分分别表示示三个符符号呢?第二个个问题是是,我们们已经知知道,英英文字母母只用一一个字节节表示就就够了,如果uuniccodee统一规规定,每每个符号号用三个个或四个个字节表表示,那那么每个个英文字字母前都都必然有有二到三三个字节节是0,这对于于存储来来说是极极大的浪浪费,文文本文件件的大小小会因此此大出二二三倍,这是无无法接受受的。它们造成成的结果果是:11)出现现了unnicoode的的多种存存储方式式,也就就是说有有许多种种不同的的二进制制格式,可以用用来表示示uniicodde。22)unnicoode在在很长一一段时间间内无法法推广,直到互互联网的的出现。5.

10、UTTF-88互联网的的普及,强烈要要求出现现一种统统一的编编码方式式。UTTF-88就是在在互联网网上使用用最广的的一种uuniccodee的实现现方式。其他实实现方式式还包括括UTFF-166和UTTF-332,不不过在互互联网上上基本不不用。重重复一遍遍,这里里的关系系是,UUTF-8是UUniccodee的实现现方式之之一,它它规定了了字符如如何在计计算机中中存储、传输等等。UTF-8最大大的一个个特点,就是它它是一种种变长的的编码方方式。它它可以使使用14个字字节表示示一个符符号,根根据不同同的符号号而变化化字节长长度。UTF-8的编编码规则则很简单单,只有有二条:1)对于于单字节节

11、的符号号,字节节的第一一位设为为0,后后面7位位为这个个符号的的uniicodde码。因此对对于英语语字母,UTFF-8编编码和AASCIII码是是相同的的。2)对于于n字节节的符号号(n1),第一个个字节的的前n位位都设为为1,第第n+11位设为为0,后后面字节节的前两两位一律律设为110。剩剩下的没没有提及及的二进进制位,全部为为这个符符号的uuniccodee码。下表总结结了编码码规则,字母xx表示可可用编码码的位。Uniccodee符号范范围 | UTTF-88编码方方式(十十六进制制) | (二二进制)+00000 000000-00000 0077F | 0 xxxxxxxxxx0

12、0000 000800-00000 07FFF | 1110 xxxxxxx 100 xxxxxxxx00000 008000-00000 FFFFF | 11110 xxxxxx 100 xxxxxxxx 100 xxxxxxxx00001 000000-00010 FFFFF | 1111100 xxxx 100 xxxxxxxx 100 xxxxxxxx 100 xxxxxxxx下面,还还是以汉汉字“严严”为例例,演示示如何实实现UTTF-88编码。已知“严严”的uuniccodee是4EE25(10001111000010001011),根根据上表表,可以以发现44E255处在第第三行

13、的的范围内内(00000 08000-000000 FFFFF),因此此“严”的UTTF-88编码需需要三个个字节,即格式式是“111100 xxxxx 110 xxxxxxxx 110 xxxxxxxx”。然后,从“严严”的最最后一个个二进制制位开始始,依次次从后向向前填入入格式中中的x,多出的的位补00。这样样就得到到了,“严”的的UTFF-8编编码是“1111001100 1011110000 1011001101”,这是是保存在在计算机机中的实实际数据据,转换换成十六六进制就就是E44B8AA5,转转成十六六进制的的目的为为了便于于阅读。6. UUniccodee与UTTF-88之间的

14、的转换通过上一一节的例例子,可可以看到到“严”的Unnicoode码码是4EE25,UTFF-8编编码是EE4B88A5,两者是是不一样样的。它它们之间间的转换换可以通通过程序序实现。在Winndowws平台台下,有有一个最最简单的的转化方方法,就就是使用用内置的的记事本本小程序序Nottepaad.eexe。打开文文件后,点击“文件”菜单中中的“另另存为”命令,会跳出出一个对对话框,在最底底部有一一个“编编码”的的下拉条条。里面有四四个选项项:ANNSI,Uniicodde,UUniccodee biig eendiian 和 UUTF-8。1)ANNSI是是默认的的编码方方式。对对于英文文

15、文件是是ASCCII编编码,对对于简体体中文文文件是GGB23312编编码(只只针对WWinddowss简体中中文版,如果是是繁体中中文版会会采用BBig55码)。2)Unnicoode编编码指的的是UCCS-22编码方方式,即即直接用用两个字字节存入入字符的的Uniicodde码。这个选选项用的的litttlee enndiaan格式式。3)Unnicoode bigg enndiaan编码码与上一一个选项项相对应应。我在在下一节节会解释释litttlee enndiaan和bbig enddiann的涵义义。4)UTTF-88编码,也就是是上一节节谈到的的编码方方法。选择完”编码方方式“后

16、后,点击击”保存存“按钮钮,文件件的编码码方式就就立刻转转换好了了。7. LLitttle enddiann和Biig eendiian上一节已已经提到到,Unnicoode码码可以采采用UCCS-22格式直直接存储储。以汉汉字”严严“为例例,Unnicoode码码是4EE25,需要用用两个字字节存储储,一个个字节是是4E,另一个个字节是是25。存储的的时候,4E在在前,225在后后,就是是Bigg enndiaan方式式;255在前,4E在在后,就就是Liittlle eendiian方方式。那么很自自然的,就会出出现一个个问题:计算机机怎么知知道某一一个文件件到底采采用哪一一种方式式编码?

17、Uniccodee规范中中定义,每一个个文件的的最前面面分别加加入一个个表示编编码顺序序的字符符,这个个字符的的名字叫叫做”零零宽度非非换行空空格“(ZERRO WWIDTTH NNO-BBREAAK SSPACCE),用FEEFF表表示。这这正好是是两个字字节,而而且FFF比FEE大1。如果一个个文本文文件的头头两个字字节是FFE FFF,就就表示该该文件采采用大头头方式;如果头头两个字字节是FFF FFE,就就表示该该文件采采用小头头方式。8. 实实例下面,举举一个实实例。打开”记记事本“程序NNoteepadd.exxe,新新建一个个文本文文件,内内容就是是一个”严“字字,依次次采用AA

18、NSII,Unnicoode,Uniicodde bbig enddiann 和 UTFF-8编编码方式式保存。然后,用用文本编编辑软件件的”十十六进制制功能“,观察察该文件件的内部部编码方方式。1)ANNSI:文件的的编码就就是两个个字节“D1 CF”,这正正是“严严”的GGB23312编编码,这这也暗示示GB223122是采用用大头方方式存储储的。2)Unnicoode:编码是是四个字字节“FFF FFE 225 44E”,其中“FF FE”表明是是小头方方式存储储,真正正的编码码是4EE25。3)Unnicoode bigg enndiaan:编编码是四四个字节节“FEE FFF 4EE

19、 255”,其其中“FFE FFF”表表明是大大头方式式存储。4)UTTF-88:编码码是六个个字节“EF BB BF E4 B8 A5”,前三三个字节节“EFF BBB BFF”表示示这是UUTF-8编码码,后三三个“EE4B88A5”就是“严”的的具体编编码,它它的存储储顺序与与编码顺顺序是一一致的。推荐这篇篇文章看看一下:9.解决决的问题题:一、如何何在中文文系统中中运行非非Uniicodde编码码程序?有很多多意大利利文版(除英文文版)学学习软件件、百科科全书等等软件在在中文系系统上会会出现乱乱码,解解决方法法: WWinddowssXP内内核是UUniccodee编码,支持多多语种,

20、对于UUniccodee编码的的应用程程序会正正常显示示原文(因为wwinddowss核心是是用unnicoode代代码写的的,所以以不存在在问题),但是是,很多多程序不不是用UUniccodee编码写写的,这这时WiindoowsXXP系统统可以指指定以特特定的编编码运行行非Unnicoode编编码程序序,中文文版WiindoowsXXP默认认的是“简体中中文GBB23112”。你只需需在控制制面板区区域和语语言选项项-高级为为非Unnicoode程程序的语语言选择择“意大大利语”,即可可正确运运行意大大利文版版的游戏戏程序。分析:我理解解的流程程是这样样:程序序意大大利语编编码(转转换表ccodeepagge)解释成成uniicodde识别别的编码码(通过过指定的的转换表表将非 Uniicodde 的的字符编编码转换换为同一一字符对对应的系系统内部部使用的的 Unnicoode 编码)被系系统翻译译成意大大利文(因为每每个unnicoode编编码对应应了相应应的意大大利文字字),便便可以正正常显示示了。二、消除除网页乱乱码?网页乱码码是浏览览器对H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论