汉字代码转换办法简述
一、前言
汉字库中某一类汉字不是所有已汉化软件系统都能支持的,即使支持也不是全部输入法都能够输入,而这类汉字在地名和人名中经常见到,例如:西安浐河区、镕、詠等,如果涉及到多个代码集之间的
转换,则让系统设计者和系统用户颇感困惑。
笔者通过检索了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
- 深圳科陆B型表使用说明书
- 汉字编码关系
- 信息技术与计算机文化
- 大学计算机基础课后题答案
1.5本章计算思维的典型案例 案例1: 计算作为人类文明的开端,从最远古的手指计数到中国古代的算盘计算到近代西方的纳皮尔算筹及帕斯卡机械式计算机,至当前的电子计算机的高速度计算,不管是计算方法还是计算工具都有了变革性的创新,计算也作为一种思 ...
江苏成人教育<大学计算机基础> 教材中习题与答案 习题一 计算机与信息技术 一. 问答题 1. 计算机的发展阶段? --四代:电子管时代.晶体管时代.集成电路时代.大规模集成电路时代. 2. 计算机的发展趋势? --五化:巨型化 ...
2011年计算机导论修订第二版课后练习答案 第一章 一.简答题 1.什么是计算机? 计算机系统是一种能够按照事先存储的程序,自动.高速的对数据进行输入.处理.输出和存储的系统.一个计算机系统包括硬件和软件两大部分. 2.解释冯·诺依曼所提出 ...
条码与技术应用习题与答案 简答题 1.二维条码的主要特点?(信息容量大.安全性高.读取率高.错误纠正能力强等) 1.高密度编码,信息容量大:信息密度高,可容纳多达1850个大写字母或2710个数字或1108个字节,或 500多个汉字,比普通 ...
第一.二章条码的概述 一.单选题 1.﹍﹍﹍国际物品编码协会﹍的宗旨是建立全球统一标识系统,促进国际贸易.其主要任务是协调全球统一标识系统在各国的应用,确保成员组织规划与步调的充分一致.A A 国际物品编码协会B 中国条码技术与应用协会C ...
DTSD/DSSD 719-B 三相电子式多功能电能表 720-B 使用说明书 (标准版:2.01) 粤制00000346号 深圳市科陆电子科技股份有限公司 目 录 1.1 概述 1.2 工作原理简述 1.3 技术参数 2.1 电能计量 2 ...
输入码.区位码.国标码与机内码 我们知道,键盘是当前微机的主要输入设备,输入码就是使用英文键盘输入汉字时的编码.目前,我国已推出的输入码有数百种,但用户使用较多的约为十几种,按输入码编码的主要依据,大体可分为顺序码.音码.形码.音形码四类, ...
第一章 信息技术与计算机文化 1.1 信息与信息技术 1.1.1 信息与数据 所谓数据,是指存储在某种媒体上可以加以鉴别的符号资料.这里所说的符号,不仅指文字.字母.数字,还包括了图形.图像.音频与视频等多媒体数据.由于描述事物的属性必须借 ...
习 题 一 一.选择题 1. 1946年2月,世界上第一台计算机ENIAC 的全称是 D . A) 通用模拟电子计算机 B) 巨型计算机 D) 电子数值积分计算机 B) 存储程序 D) 数据库系统 B) 辅助设计 D) 人工智能 C) 通用 ...