c语言unicode编码转gbk,基于C语言的GBK-Unicode文本编码转换系统的实现

1.引言到文件*/文字编码是给文字编制二进制存储代码的技术,编码方案FILE*fp=fopen(filename,"wb");有很多种,在显示字符时如果采用了不正确的编码标准,就会unsignedinthigh,low,i;//N=5出现乱码。本文研究文本的转换技术在国内可查到的期刊论文unsignedintstar[tN]={0xB0A1,0x8140,0xAA40,0xA1A1,数量较少[1][2],而该技术可以为嵌入式平台字符显示提供必要的0xA840};参考。本文首先分析常用汉字编码标准,然后实现GBK到U-unsignedintend[N]={0xF7FE,0xA0FE,0xFEA0,0xA9FE,nicode的转换。0xA9A0};2.常见汉字编码标准for(i=0;i>8)&0xFF);high>8)GB18030、Unicode、ISO/IEC10646等[3][4]。GB2312是1980年由国&0xFF);high++)家标准总局发布,收录了6763个汉字和682个全角中文字符。for(low=(start[i]&0xFF);low>8)&0xFF);high>8)许多网站提供这种转换表[6],但这里我们借助记事本程序&0xFF);high++)来获取转换表:(1)输出所有的GBK的有效码字到一个文本文for(low=(start[i]&0xFF);low<=(end[i]&0xFF);件,有效码字通过分析二进制代码或查阅相关资料[7]得到。(2)low++){打开该记事本文件并将其重命名后,另存为Unicode编码格式col=fgetc(fp);row=fgetc(fp);的文本文件。(3)读取Unicode编码文件,生成映射表。gbk2unicode[high][low]=(row<<8)|col;typedefunsignedintCodeTableType[256][256];unicode2gbk[row][col]=(high<<8)|low;}voidWriteGBK(charfilename[]){/*写入GBK编码字符集fclose(fp);

}3.2将文件由GBK编码转换成Unicode编码基本思想是写入Unicode编码文件时先写入文件头标记0xFFFE。读取GBK编码文件的一个字节,如果该字节的值小于128,则为西文字符,需要在ASCII码基础上,增加一个二进制值为0的字节。比如30H,将转换成0030H。否则为中文字符,进行双字节编码映射,存储顺序需要改变。效果如图1所示。voidConvert2Unicode(charinfile[],charoutfile[],CodeTableTypegbk2unicode){FILE*in=fopen(infile,"rb"),*out=fopen(outfile,"wb");/*将文档GBK转成Unicode*/unsignedintrow=0,col=0,high=0,low=0;fputc(0xFF,out);fputc(0xFE,out);while(!feof(in)){row=fgetc(in);if(row<128){col=row;row=0;}elsecol=fgetc(in);high=((gbk2unicode[row][col])>>8)&0xFF;low=(gbk2unicode[row][col])&0xFF;fputc(low,out);fputc(high,out);}fclose(in);fclose(out);}4.结束语本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值