GBK与Unicode对照表的生成

#include "stdafx.h"


#include "Windows.h"


// 写GBK_UniCode表函数,参数 fp 文件指针,代码页起讫值,空代码值


int WriteGBK_UniCodeTable(FILE *fp,unsigned istart,unsigned iend,unsigned jstart,unsigned jend,unsigned ExNum)
{
char zifu[3];
har * tmpchar = new char(3);
unsigned i,j,k;
unsigned char m,n;
for(i=istart;i<=iend;i++)
{
zifu[0] = i;
zifu[2] = 0;
fprintf(fp,"\n%02X\n\t",i); // 国标区码
for(k=0;k<=15;k++)
{
fprintf(fp,"%X\t",k); // 国标位码列
}


for(j=jstart;j<=jend;j++)
{
if(j%16==0)
fprintf(fp,"\n  %X\t",j/16); // 国标位码行
zifu[1] = j;
// 将国标码转换成unicode
MultiByteToWideChar(CP_ACP,0,(LPCSTR)zifu,2,(WCHAR*)tmpchar,1);
m = tmpchar[1];
n = tmpchar[0];
if (j==ExNum)
{
fprintf(fp,"\t");
}
else
fprintf(fp,"%s,%02x%02x\t",zifu,m,n); // 字符,unicode码
}
fprintf(fp,"\n");
}
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp = fopen("c:\\tt.txt", "w");
char zifu[3],zifu_uni[2];
char * tmpchar = new char(3);
unsigned  i,j,k;
unsigned char  m,n;


// GBK/1  A1–A9  A1–FE  846717   GB2312非汉字符号

fprintf(fp," GBK/1    A1–A9 A1–FE        846 717     GB2312非汉字符号\n\n");
WriteGBK_UniCodeTable(fp,0xa1,0xa9,0xa0,0xfe,0xa0);

// GBK/2    B0–F7 A1–FE        6,768   6,763   GB2312 汉字

fprintf(fp," \nGBK/2   B0–F7A1–FE  6,768  6,763   GB2312 汉字\n\n");

WriteGBK_UniCodeTable(fp,0xb0,0xb7,0xa0,0xfe,0xa0);

// GBK/3    81–A0 40–FE(7F除外) 6,080 6,080   扩充汉字
fprintf(fp,"\nGBK/3    81–A0 40–FE(7F除外) 6,080 6,080   扩充汉字\n\n");
WriteGBK_UniCodeTable(fp,0x81,0xa0,0x40,0xfe,0x7f);

// GBK/4   AA–FE 40–A0(7F除外) 8,160 8,160   扩充汉字
fprintf(fp,"\nGBK/4   AA–FE 40–A0(7F除外) 8,160 8,160   扩充汉字\n\n");
WriteGBK_UniCodeTable(fp,0xaa,0xfe,0x40,0xa0,0x7f);

// GBK/5   A8–A9 40–A0(7F除外) 192 166     扩充非汉字
fprintf(fp,"\nGBK/5   A8–A9 40–A0(7F除外) 192 166     扩充非汉字\n\n");
WriteGBK_UniCodeTable(fp,0xa8,0xa9,0x40,0xa0,0x7f);

//用户定义    AA–AF  A1–FE        564
fprintf(fp,"\n用户定义1    AA–AF A1–FE        564\n\n");
WriteGBK_UniCodeTable(fp,0xaa,0xaf,0xa0,0xfe,0xa0);


//用户定义    F8–FE A1–FE       658

fprintf(fp,"\n用户定义2     F8–FE A1–FE        658\n\n");
WriteGBK_UniCodeTable(fp,0xf8,0xfe,0xa0,0xfe,0xa0);

//用户定义    A1–A7  40–A0(7F除外) 672
fprintf(fp,"\n用户定义3    A1–A7 40–A0 7F除外 672\n\n");
WriteGBK_UniCodeTable(fp,0xa1,0xa7,0x40,0xa0,0x7f);

fclose(fp);
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: GBK和UTF-8是两种常见的字符编码方式,其中GBK是国标规定的汉字内码,而UTF-8是一种通用的编码方式。 GBK编码包括两个部分:区位码和汉字内码。其中,区位码是由区号和位号组成,用来示汉字在GBK编码中的位置;而汉字内码是由两个字节组成,用来示实际的字符编码。 与此不同的是,UTF-8使用8位序列来示字符,可用于示多种语言的字符集,包括英语、汉语、日语等等。UTF-8采取变长编码,不同的字符可以采用1~4个字节来示,从而更加灵活和高效。 在实际应用中,需要使用转换工具将不同编码方式的字符集进行转换,以便正确地显示和处理文本。通常使用的工具包括iconv、ficonv、uconv等等。 总之,GBK和UTF-8是两种不同的字符编码方式,可以用于存储和传输不同语言的文本信息,需要根据具体的需求选择合适的编码方式。 ### 回答2: GBK和UTF-8都是字符编码标准,其中GBK是基于汉字的编码标准,而UTF-8则是一种通用的编码标准。 GBK编码标准是由中国国家标准局开发的,它支持简体和繁体中文,在GBK对照表中,每个汉字都有一个唯一的二进制编码值。GBK编码可以示21676个中文汉字以及其他符号和字符。由于GBK编码是双字节的编码方式,因此使用GBK编码的文件大小通常比使用其他单字节编码的文件大小大一倍。 而UTF-8是一种可变长度的编码标准,它支持所有Unicode字符,并且在示ASCII字符时可以使用单字节编码,不会出现文件大小双倍的问题。在UTF-8的对照表中,每个字符的编码长度可以是1到4个字节。 在GBK和UTF-8之间进行转换时,需要使用相应的对照表进行转换。通常情况下,GBK编码被用于在Windows系统下进行文本显示和存储,而UTF-8编码则被用于在Web上显示和存储文本。 ### 回答3: GBK和UTF-8是计算机编码中常用的两种字符集,都是用于支持中文编码GBK是国家标准GB2312的扩展,支持汉字和日韩假名。而UTF-8是Unicode字符集的一种编码方式,支持全球范围内的字符,包括亚洲语言、欧洲语言、非洲语言、拉美语言以及其他语言。下面是GBK和UTF-8对照表的一些例子: GBK编码:中文字符“你”的编码为B7 E7,英文字符“a”的编码为61; UTF-8编码:中文字符“你”的编码为E4 BD A0,英文字符“a”的编码为61。 从上述对比可以看出,UTF-8编码相比GBK编码所占用的空间更大,但UTF-8支持更多种语言和字符。在实际应用中,程序员需要根据具体的需求选择采用哪种编码方式,以充分发挥其优势。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值