汉字代码转换办法简述

一、前言

汉字库中某一类汉字不是所有已汉化软件系统都能支持的,即使支持也不是全部输入法都能够输入,而这类汉字在地名和人名中经常见到,例如:西安浐河区、镕、詠等,如果涉及到多个代码集之间的

转换,则让系统设计者和系统用户颇感困惑。

笔者通过检索了MICROSOFT 和IBM 两公司的官方网站关于汉字处理方面的内容,获得了一些比较有用的资料,通过一些试验后,解决了这部分汉字在PC 和IBM 主机之间代码转换和通讯的问题。

二、代码集

目前软件系统中使用最多的代码集中,单字节码当属ASC II ,可以表达拉丁字母、数字和常用符号等;双字节码当属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 (s1>0x7f)

sum1--;

f2 = sum1 / 0xbd +0x81;

s2 = sum1 % 0xbd;

if(f2>0x81)

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是主机EBCDIC 码的第一字节,s2是第二字节。如果要和单字节区分开,前面需要加0x0e 后面需要加0x0f 。

4. 应用:

通过以上算法,我们来看前面所提几个字的代码值(16进制)转换对应关系:

浐: PC 码为9BBA EBCDIC码为 9BEF 属于GBK-3

镕: PC 码为E946 EBCDIC码为 C1A8 属于GBK-4

詠: PC 码为D481 EBCDIC码为 B759 属于GBK-4

四、总结

日常生活中内地和港、澳、台及海外华侨之间信息交流日益频繁,信息处理工具对汉字(包括简体和繁体)处理的支持就具有不可轻视的地位。IBM 主机在银行等大型机构中具有广泛的应用,主机和PC 之间的汉字代码转换通常是两者之间通讯时需要考虑的重要部分。本文旨在提供一个方法,解决扩展汉字代码的转换问题,以供相关程序设计者丰富和完善此部分程序的功能实现。

一、前言

汉字库中某一类汉字不是所有已汉化软件系统都能支持的,即使支持也不是全部输入法都能够输入,而这类汉字在地名和人名中经常见到,例如:西安浐河区、镕、詠等,如果涉及到多个代码集之间的

转换,则让系统设计者和系统用户颇感困惑。

笔者通过检索了MICROSOFT 和IBM 两公司的官方网站关于汉字处理方面的内容,获得了一些比较有用的资料,通过一些试验后,解决了这部分汉字在PC 和IBM 主机之间代码转换和通讯的问题。

二、代码集

目前软件系统中使用最多的代码集中,单字节码当属ASC II ,可以表达拉丁字母、数字和常用符号等;双字节码当属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 (s1>0x7f)

sum1--;

f2 = sum1 / 0xbd +0x81;

s2 = sum1 % 0xbd;

if(f2>0x81)

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是主机EBCDIC 码的第一字节,s2是第二字节。如果要和单字节区分开,前面需要加0x0e 后面需要加0x0f 。

4. 应用:

通过以上算法,我们来看前面所提几个字的代码值(16进制)转换对应关系:

浐: PC 码为9BBA EBCDIC码为 9BEF 属于GBK-3

镕: PC 码为E946 EBCDIC码为 C1A8 属于GBK-4

詠: PC 码为D481 EBCDIC码为 B759 属于GBK-4

四、总结

日常生活中内地和港、澳、台及海外华侨之间信息交流日益频繁,信息处理工具对汉字(包括简体和繁体)处理的支持就具有不可轻视的地位。IBM 主机在银行等大型机构中具有广泛的应用,主机和PC 之间的汉字代码转换通常是两者之间通讯时需要考虑的重要部分。本文旨在提供一个方法,解决扩展汉字代码的转换问题,以供相关程序设计者丰富和完善此部分程序的功能实现。


相关文章

  • 东华理工大学专升本计算机考试重点
  • 第一章 1 在计算机中,存储信息的最小单位和基本单位是什么?它们之间的关心如何? 存储器设备最基本的存储单元是字节,比特是存储器的最小组成单位 1Byte=8bit 2 存储器的主要技术指标是什么?存储容量.存取周期 3 在计算机中指令是由 ...查看


  • 乱码出现的问题大全
  • 乱码出现的问题大全.txt 我们在使用电脑时,经常会遇到乱码:例如登上港台网站时会看到乱码,打开E-mail时也会看到乱码,更为严重的是原先显示正常的Win9X/Win2K桌面.菜单中汉字一夜之间"面目全非",本来显示正 ...查看


  • 计算思维案例及平时成绩讨论题
  • 1.5本章计算思维的典型案例 案例1: 计算作为人类文明的开端,从最远古的手指计数到中国古代的算盘计算到近代西方的纳皮尔算筹及帕斯卡机械式计算机,至当前的电子计算机的高速度计算,不管是计算方法还是计算工具都有了变革性的创新,计算也作为一种思 ...查看


  • 江苏成教计算机基础-教材习题与答案
  • 江苏成人教育<大学计算机基础> 教材中习题与答案 习题一 计算机与信息技术 一. 问答题 1. 计算机的发展阶段? --四代:电子管时代.晶体管时代.集成电路时代.大规模集成电路时代. 2. 计算机的发展趋势? --五化:巨型化 ...查看


  • 计算机导论第二版答案
  • 2011年计算机导论修订第二版课后练习答案 第一章 一.简答题 1.什么是计算机? 计算机系统是一种能够按照事先存储的程序,自动.高速的对数据进行输入.处理.输出和存储的系统.一个计算机系统包括硬件和软件两大部分. 2.解释冯·诺依曼所提出 ...查看


  • 计算机基础考试-简答题
  • 计算机基础知识 2. 计算机有哪些基本特点? 答:1. 运算速度快 2.存储容量大 3.计算精度高 4.逻辑判断力强 5.自动化程度高 3. 简述计算机的四个发展阶段? 答:第一代 1946年-1953年 电子管 第二代 1954年-196 ...查看


  • 大学计算机基础简答题 1
  • 1. 简述计算机的发展情况. 答:1946年2月,美国的宾夕法尼亚大学研制成功了世界上第一台计算机--ENIAC 至今,按计算机所采用的电子元件的变化来划分计算机的发展阶段,大致辞可分为四代: 第一代为电子管计算机(1946--1958)计 ...查看


  • 行为主义.认知主义.建构主义学习理论的知识观.学习观与教学观
  • 教育心理学作业 作业题目:简述行为主义.认知主义.建构主义学习理论的知识观.学习观与教学观并谈谈你对这些观点理解和看法. 一.建构主义学习理论的知识观.学习观.教学观 1.建构主义知识观 建构主义认为,知识不是客观的东西,而是主体的经验.解 ...查看


  • 条码技术与应用期末考试习题与答案
  • 条码与技术应用习题与答案 简答题 1.二维条码的主要特点?(信息容量大.安全性高.读取率高.错误纠正能力强等) 1.高密度编码,信息容量大:信息密度高,可容纳多达1850个大写字母或2710个数字或1108个字节,或 500多个汉字,比普通 ...查看


热门内容