admin 管理员组

文章数量: 887021


2023年12月17日发(作者:简述seaborn的优势)

计算机时代2012年第1期 ・ 33 ・ 常用编码方式及其格式转换 冯灵清,杨怀卿,刘宇晶 (山西农业大学,山西太谷030801) 摘要:由于存在着多种编码方式,在进行信息处理时,经常需要在不同编码方式之间进行转换。为此,对ASCII码、 GBK码、Unicode码以及这三种编码方式之间的转换进行了介绍,并给出了具体实现转换的流程图和部分代码。 关键词:ASCII;GBK;Unicode;格式转换 中图分类号:TP391.11 文献标志码:A 文章编号:1006—8228(2012)01—33—03 Common coding methods and format conversion Feng Lingqing,Yang Huaiqing,Liu Yujing (Shanxi Agricultural University,Taigu,Shanxi 030801,China) Abstract:Because there are many encoding methods,the conversion between diferent encoding methods is often needed in information processing.For this reason,we describe ASCII,GBK and Unicode,as well as the conversion between the three encoding,and give the flow diagrams and parts of the code to realize the conversion. Key words:ASCII;GBK;Unicode;format conversion 0引言 随着信息技术的不断发展,不同信息平台之间的信息交流 量越来越大,在接受来自不同平台的信息的平台上打开文本文 时出现乱码。 1常用编码方式 1.1 ASCll码 件,会出现乱码或者是无法读取的现象,因为不同信息平台会 使用不同的字符编码方式。 ASCII码(American Standard Code for Information Interchange),全称叫美国国家信息交换标准码,于1968年提 出,被国际标准化组织(iso) ̄定为国际标准。ASCII码使用 都是以二进制编码方式存储和计算的。我们若把硬盘拆开会 七位二进制数表示一个字符,这样可以表示出128个字符。其 看到一些盘片,用显微镜把盘片的每一处放大,可以看到盘片 中包含了英文的大小写字母、数字、标点符号等常用的字符,数 表面凹凸不平,其凸起的地方是被磁化的,凹的地方是没有被 字代号从0至127。 磁化的;凸起的地方代表数字l,凹的地方代表数字0。硬盘只 ASCII码常常被用于输入输出设备,比如键盘的输入,显示 能用0和l来表示所有文字、图片等信息。就文字来说,由于文 器和打印机输出等。从键盘输入字符信息时,编码便会将字符 字中存在着大量的重复字符,而计算机是用来处理数字的,我们 转换成ASCII码输入计算机内部,计算机处理后再将ASCII码 可以用一个数字编码来表示每一个字符,对每一个字符规定一 表示的数据转换成对应字符在显示器或打印机上输出。大多 个惟一的数字代号,对应每一个代号,就可建立其相对应的图 数的小型机和全部的个人计算机都使用此码。 形。这样,在每一个文件中,我们只需要保存每一个字符的编 但是,ASCII码能有效的解决西文文字的信息化问题,但对 码就相当于保存了文字;在需要显示的时候,先取得保存起来 于汉字字符却完全不适用。为了满足国内计算机使用汉字的 的编码,然后通过编码表,查到字符对应的图形,然后将这个图 需要,中国国家标准总局发布了一系列的汉字字符集国家标准 形显示出来,这样我们就可以看到文字了。这些用来规定每一 编码,统称为GB码,或国标码。 个字符所使用的代码的表格,就称为编码表。编码就是对我们 1.2 GBK码 13常使用字符的一种数字编号。计算机中常用的西文字符编 针对汉字,中国的标准化组织出台了GB2312简体中文编 码有ASCII码(美国标准信息交换码),汉字字符编码有 码,目前我们常用的汉字编码一般采用的就是GB2312,但是这 Unicode,GBK等。由于存在着多种编码方式,同一个二进制数 个标准里只包含了6763个汉字。GBK是我们国家制定的汉字 字在不同的编码方式下就代表着不同的字符。因此,要想显示 编码字符集,向下兼容了GB2312还进行了补充,容纳的汉字可 个汉字字符,不但要知道它的编码方式,还要有对应编码表, 达22014个,几乎包含了全部的中文字符。GBK编码中不论英 并在不同编码方式之间进行转换,否则就可能无法读取或读取 文还是汉字都是采用两个字节来表示,为了区分中英文将中文 一我们在显示器上看到的文字、数字、图片等信息在电脑里 收稿日期:2011一ll—O7 作者简介:冯灵清(1983一),女,山西长治人,主要研究方向:计算机原理。 

・34・ Computer Era No.1 2012 编码的最高位置为l。但是这种编码方式仅仅在中国可以通 Unicode编码对应不同长度的uTF一8。所以只有先确定字符 用,在国外浏览网页或是打开文本时会出现无法打开或是出现乱 Unicode编码所在的范围,然后才能确定用UTF-8字节流中的 码的睛况,因为在国外没有GBK的编码表。 几个字节去编码,再将字符的编码写成二进制的形式,将每一 ASCII码不能处理大多数其他语言的字符,GBK也只能用 位依次填充图1中的x。图的uTF一8字节流中最多含有21个 于汉字的编码。如果有一种编码可以将世界上所有的字符都 x,而Unicode编码的最大取值为0X10FFFF写成二进制形式 纳入其中,无论是英文、日文、还是中文等,大家都使用这个编 也只有2l位,完全可以满足x的需求。上述格式转换的流程 码表,就不会出现编码不匹配现象。每个符号对应一个惟一的 编码,乱码问题就不存在了。这就是Unicode编码。 1.3 Unicode码 图如图2所示。 1{嘲l幽自鹌教撼 I Unicode编码是目前最为流行的编码方案,它包含了世界 OXO0一j) x7F  }I l fiX,q0—0X7FI BXSO0 OXPI I、F l l z  l 1i 'OXl(tt t I I I j  I— — — — — 一 上所有语言的字符和符号,并为各国语言的每一个字符都规定 了惟一标识这个字符的二进制编码,也为各国之间的文本交流 提供了有利的平台。Unicode学名是“Universal Multiple—Oc— tet Coded Character Set”,简称为UCS,UCS可以看作是“Uni— code Character Set”的缩写。 靠≠缓媛8 f{:>>郇&(hI_ 0 《:O tC }拼&0巾{ 0 ̄,1 0 、18 ̄Ox07 0xf i L, l2,&帆0F ftx 0 ●豳 他 ¨)6;&I)x 《} “} 辩 t刚 I蕊0x0}’O O l话8仕 ;㈣n t 锨 --,, , ~~~~~ …“,j0j 0 j 0x“{ 篓 磐 i女Ox3F(hlO I Unicode编码使用0 ̄0xl0FFFF这个范围的数字来对应每 一蜘接城埔韫 1 攒谈戚2,1辑 I 0 拼被0 { 剐 城32静 个字符,最多可以映射1114112个字符。目前普遍使用的是 UCS一2。UCS一2采用两个字节也就是l6位来编码一个字符, 因此最多可以映射65535个字符,虽然不常见的生僻字没有包 含进去,但在某种意思上也满足了需求。 Unicode作为一个字符的集合,它只规定了符号的二进制 一f¨ 瓣秘靛搬 l l 图2 Unicode编码向uTF一8编码方式转换 2.2 UTF1 6 TO Unicode 代码,并没有规定这个二进制代码应该如何存储,在数据传输 和数据处理的情况下不适合采用,所以就需要一种编码方式, 将Unicode的编码与程序数据联系在一起,并转化为数据。于 是根据编码基本单位的不同,产生了U,rF一8,U,I'F—l6,uTF一32 等编码格式。UTF(UCS Transformation Format)是UCS的传 输格式。 Unicode编码与UTF一16方式的对应关系如图3所示。 UTF一8是以一个字节(8位)为一个单位来编码的。对于 0x00~0x7F之间的字符编码与ASCII的字符编码相同,不需要 图3 Unicode编码与uTF—l6编码方式的对应关系 可以看出uTF一16是以字节为单位,范围取值在0~ 转换;其余的可以根据字符范围的不同进行不同长度的uTF一8 0xl0FFFF之间,基本上是Unicode编码的完整实现方式。在小 编码。UTF-16是以l6位为单位的,基本上与UCS一2对应。但 于0xl0000的范围内,UTF一16字节流就是单个WORD,直接对 是UTF一16是变长码,取值范围是0—0xl0FFFF,而且UTF-16编 应Unicode编码的无符号l6位整数,但这里要考虑的是CPU存 码与CPU的存储模式有关系,分为大端存储和小端存储。 储数据的方式大端存储还是小端存储。所谓的大端存储就是 UTF一32则是使用四个字节32位编码。三种编码方式之间可 数据的高位存在低位地址中,低位存在高地址中;所谓小端存 以进行转换,但是都必须经过Unicode编码才能转换为另一种 储则是高位存在高地址中,低位存在低地址中。如果Unicode 编码方式。 2常用编码方式之间的格式转换 2一Unicode TO UTF8 一编码的值大于等于0xl0000,先让其减去0xl0000,之后写成20个 二进制形式,最后在前10个二进制数前加“110110”,后l0个二进 制数前加“110111”就形成了UTF一16编码。流程图如图4所示。 UTF一8编码方式是以字节为单位对Unicode进行编码的。 先来看看Unicode编码(十六进制)与UTF一8(二进制)方式的对 应关系,如图1所示。 图l Unicode编码与uTF一8方式的对应关系 可以看出UTF一8方式是一种变长码,不同长度的字符使用 不同长度的编码。在OXO0—0X7F之间的Unicode编码对应 UTF一8中的与ASCII编码相同的部分。其余不同范围的 图4 uTF一16编码方式向Unicode编码转换 

计算机时代2012年第1期 2.3 UTF 8 TO GBK GBCode=41914: ・ 35 ・ 前面已经提及,Unicode编码的三种编码与其他编码可以 进行转换,但是都必须经过Unicode编码才能转换为另一种编 码。例如,以UTF一8编码方式向GBK编码转换为例,uTF一8编 码方式要先转换为Unicode编码,之后Unicode编码再转换为 GBK编码。转换流程图如图5所示。 ) else if(w_unicode==65307) { GBCode=41915: ,,修正分号的GBK码 ) ) else{ //小于0x4e00 if(w_unicode==12290)( GBCode=41379; //修正句号的GBK码 ) } 转换为GBK编码后,如果是一个字节即高8位全为0,则直 接输出低8位,之后显示这个编码所对应的字符;如果是两个字 节,要先输出高8位后输出低8位,之后在显示屏上显示拼接成 的16位GBK编码所对应的字符。 3结束语 本文针对不同编码方式之间的转换进行了简要的叙述,并 给出了具体实现的流程图和部分代码。相反方向的转换只是 相应转换过程的逆过程,这里就不再赘述。编码方式之间的转 图5 Unicode编码方式向GBK编码转换 换解决了不同信息平台之间的信息传递问题,有效避免了乱码 和无法打开现象的出现,具有通用性,实用性。 这里注意:在转换为Unicode编码后,不能全部直接显示, 参考文献: 因为Unicode只有一部分字符(0X4E00~0X9FA5)可以直接显 【1】邱发林.Unicode及中文到Unicode转换【J】科技信息,2006 3: 示并且显示时无乱码,一些大于0X4E00中的一些字符需要作 41914,所以要将其对应起来。对于小于OX4E00中的所需要的 字符也进行,其修正方法一样。部分代码如下: if(w_unicode>=0x4e00){ if(w .unicode == 65306){ //大于0x4e00 //修正冒号的  GBK 码20-21 2】张晓培,李祥.从Unicode到GBK的内码转换【J】l微计算机应用, 修正,比如:冒号“:”在Unicode编码中是65306,而在GBK中是 【2006.6:757-759 【3】http://www.5xsoft.com/data/2001O9/06O8094201.htm. 【4】http://www.bjprint.net/book/01/nm htm. [5】http://www.clyrics.com/stoRec/hanzi/chinese.htm・ (上接第32页) Then 3结束语 本程序代码在VS.NET开发平台中使用VB语言编写,功 能在Win XP及win 7下都运行调试成功。本程序实现了各种 Me.Show() Timer1.Stop() ’代码同上,略去 End lf 开关机动作的自动执行,提高了电脑管理的智能化水平。 参考文献: End Sub 【1】高红.基于VB.NEl"自动验证功能TextBox派生类控件的设计与实 现【J】_福建电脑,2009.12:127 【21郑军,陈晓颖.在VB.NET中实现GIS调用【J】.计算机与信息技术, 2010 4:20~21 【3】张良,何也熙.Matlab、Access和VB.NET混合编程方法的研究和应 用【J】.计算机工程与设计,2009.30(05):1232~1235 [4】孙利娟.编程工具VB6 0与VB.NET的比按研究[J】.黄河水利职业 技术学院学报,2010.22(01):52~54 【5】苗哲.定时关机/重启器的设计与实现【J】.信息科学,2009(36):136 图2功能运行界面 


本文标签: 编码 字符 转换 信息