汉字代码转换办法简述.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汉字代码转换办法简述

一、前言 汉字库中某一类汉字不是所有已汉化软件系统都能支持的,即使支持也不是全部输入法都能够输入,而这类汉字在地名和人名中经常见到,例如:西安浐河区、镕、詠等,如果涉及到多个代码集之间的 ? 转换,则让系统设计者和系统用户颇感困惑。 笔者通过检索了MICROSOFT和IBM两公司的官方网站关于汉字处理方面的内容,获得了一些比较有用的资料,通过一些试验后,解决了这部分汉字在PC和IBM 主机之间代码转换和通讯的问题。 二、代码集 目前软件系统中使用最多的代码集中,单字节码当属ASCII,可以表达拉丁字母、数字和常用符号等;双字节码当属UNICODE,它除了能表达ASCII所包括的字符外,还可以表达目前世界绝大多数语言的字符,包括汉字字符;扩展ASCII码也常常用来表达一些需要双字节表达的字符。另外,在某些行业所使用的IBM主机系统中,则较多地使用了EBCDIC字符集,既有单字节的表达,也有双字节的表达;。 汉字字符代码集中,GB2312-80和GB13000是先后颁布的两个国家标准。前者可以表达6763个简体汉字和682个非汉字符号;后者1994年颁布,支持20902个字符,兼容ISO 10646-1:1993的CJK字符集标准。 还有一些不太常用的代码集,或者说很少见到软件实现的代码集,如已提及的ISO标准(虽然它不常用,但标准涵盖了以上各个字符集)。 GBK字符集是对GB2312-80的一个扩展,达到GB13000的所有的20902个字符,里面还包含了繁体汉字,总共20975个汉字字符,911个非汉字符号和1894个用户定义字符(如偏旁、部首、笔画等)。 三、代码转换 在各类不同的软件系统之间进行信息传输和通讯,必然涉及到代码转换的问题,PC系统中常有UNICODE和ASCII码之间的转换,PC系统和IBM主机系统之间有ASCII码和EBCDIC码之间的转换。由于篇幅和技术材料所限,以下仅讨论ASCII码和EBCDIC码之间的转换。 1.单字节ASCII和EBCDIC 单字节的ASCII码和EBCDIC码之间的转换比较简单,只需要建立一个对照表即可。(代码的数字表达如无特别说明,均使用16进制,以下同) 部分字符对照码见下表: 表1 单字节ASCII和EBCDIC对照表(部分) 2.汉字双字节ASCII和EBCDIC: 双字节的ASCII采用一个扩展ASCII码(即字节的最高位置1)加一个标准ASCII码或者两个都使用扩展ASCII码来表达一个汉字或非汉字符号;双字节的EBCDIC编码也采用此方式来表达,但双字节字符串两端采用分隔符来与单字节字符区分,首分隔符为0E,尾分隔符为0F。 两者的对照关系见如下图1和图2(GBK标准): 图1 中文简体双字节字符结构图(扩展ASCII码) 图2 中文简体双字节字符结构图(EBCDIC码) 3.汉字双字节码转换算法: 从结构图中可以看出,标准GBK-1、GBK-2覆盖了GB2312-80的字符集,其转换算法涉及到几个繁杂的对照表,对照关系是高字节和低字节拆开经过计算后,再到对照表中查到对应字符,最后合并两新字符而成。由于此两部分的汉字代码比较常见,转换工具比较成熟,容易寻找,这里不进行详细讨论。 我们真正感兴趣的是在GBK-3和GBK-4代码的转换方法上,许多繁体字、偏僻字都集中在这两个区中。参看图3和图4所描述的编排规则,再结合图1和图2,不难发现,由于是顺序编码,其转换算法应比GBK1和GBK2简单许多。 下面仅以GBK-3的扩展ASCII码(以下简称PC码)到EBCDIC码转换关系为例,GBK-3的逆转换和GBK-4的双向转换可以以类似方法设计出来。算法以C语言描述: sum1 = (f1-0x81) * 0xbe + s1 - 0x3f; if (s10x7f) sum1--; f2 = sum1 / 0xbd +0x81; s2 = sum1 % 0xbd; if(f20x81) s2+=sum1/0xbd; s2 += 0x40; if(s2 = 0x80) s2++; if(s2 = 0xfe) { s2 = s2 - 0xfe + 0x41; f2++; } 图3 部分GBK码的编码规则(扩展ASCII码) 图4 部分GBK码的编排规则(EBCDID) 算法细节描述: ○ 首先算法入口f1是汉字PC码的第一字节,s1为第二字节 ○ sum1为其在当前PC码区内的顺序值,并考虑到s1没有0x7f和0xff编码; ○ 根据顺序偏移,决定其在对应EBCDIC码的区间第一和第二字节的分布,见图2。但第二字节在0x80、0xfe和0xff没有编码(这点在图2中没有明确说明,笔者通过编码传到IBM主机中测试总结了这个规则); ○ 算法出口结果f2是主机

文档评论(0)

haocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档