AS/400采用EBCDIC编码保存在QSYS.LIB中的所有中文字符,而在pc端winows 95,
windows NT采用GBK内码保 存中文字符,两者之间在进行中文数据传输的时候,会遇到EBCDIC和GBK的相互转换。所以,掌握EBCDIC和GBK 的转换码表对于程序员非常重要。
1 收集GBK字符文件
首先必须根据GBK的编码原则得到GBK的汉字库。GBK的编码区间为0X8140到0XFEFE。整个码表分为5个区间,称为GBK1(A1A1 A9FE)、GBK2(B0A1 F7EE)、GBK3(8140 A0FE)、GBK4(AA40 FEA0)、GBK5(A840 A9A0).其中GBK1包括符号717个,GBK2包括GB2312汉字6763个,GBK3包括GB13000.1中的汉字6080个,GBK4包括增补的汉字8160个,GBK5包括扩充汉字符号166个。
程序1:
/* file1.c */
#include<stdio.h>
void main(void)
{
FILE *fp;
char ch[4],file[10],enter[2],hi,lo;
long int i;
enter[0]=0x0d;
enter[1]=0x0a;
printf("please input the file name:\n");
scanf("%s",file);
if((fp=fopen(file,"wb"))==NULL)
{
printf("cannot open %s\n",file);
exit(0);
}
hi=0xa7;
lo=0x40;
for(i=0;i<2*191;i++)
{
ch[0]=0x22;
if(i%191==0)
hi=hi+1;
ch[1]=hi;
ch[2]=(lo+i%191);
ch[3]=0x22;
fwrite(ch,sizeof(char),4,fp);
fwrite(enter,sizeof(char),2,fp);
}
}
程序说明:
(1).OX22是'"'(双引号)的16进制代码,0X0D 0X0A是换行符号的16进制代码,在每一个字符的两旁增加双引号和缓行符号是为了满足CPYFRMIMPF对Import file的格式要求而特别增加的。
(2).结果文件假设命名为GBK.TXT,文件样本见附件。
程序2:得到没有" "和0X0D 0X0A的汉字字库文件
#include<stdio.h>
void main(void)
{
FI