哪位朋友有简繁转换方面的经验或者示列代码(C++)请告诉兄弟一下。多谢了
解决方案 »
- 在EDIT中创建combox的显示问题
- 新创建了一个线程,怎么通过线程删除窗口类中vector的元素?
- SOCKET ServerSock定义后的错误是什么意思?
- com问题两问
- 请教:静态控件中如何显示位图??
- msdn突然不能使用,谁能够帮我?谢谢!
- 如何实现socks5客户端的远程域名解析,实现这个可以解决DNS污染来达到访问国外网站的目的。求高人指点!
- 如何在win32程序使用TRACE?
- 请教:一般软件中"设置"项的设置结果都是存在注册表中吗?还是在单独的文件中?另外我想为程序加上,不同的登录用户有不同的使用权限,如何实现?
- 敬请高手接招:数据库SEVER/CLIENT模式
- 如何计算每个函数消耗的时间!
- 关于GDI+的问题,怎么转换图像格式?
转换工作的关键是有一个记录每个BIG5编码对应GB编码的码表文件。
第一步 制作码表文件
BIG5码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE,共126种。第二个字节的范围分别为0X40-0X7E,0XA1-0XFE,共157种。也就是说,利用这两个字节共可定义出 126 * 157=19782种汉字。制作码表文件的原理是这样的:首先将所有的BIG5编码写入一个文件,然后,使用具有BIG5码到GB码转换功能的软件,如金山快译,将文件转换为GB码文件,即得到码表文件。
下面的源程序将所有可能的BIG5编码,写入文件“table.txt”。
//CreateBig5.cpp
#include
#include void main()
{
FILE* codeFile;
int i,j,k;
codeFile=fopen("table.txt","w+b");for (i=0x81;i<=0xFE;i++)
{
for(j=0x40;j<=0x7E;j++)
{
fwrite(& i,1,1,codeFile);
fwrite(& j,1,1,codeFile);
}
for(k=0xA1;k<=0xFE;k++)
{
fwrite(& i,1,1,codeFile);
fwrite(& k,1,1,codeFile);
}
}
fclose(codeFile);
return;
}
运行金山快译,将“table.txt”从BIG5码转换为GB码,即获得码表文件。 第二步 转换
下面的源程序,将BIG5码文件转换为GB码文件。
//Big5ToGB.cpp
#include
#include
#include void main()
{
int high=0,low=0;
FILE* sourceFile;
FILE* tableFile;
FILE* destFile;sourceFile=fopen("big5.txt","r+b");
tableFile=fopen("table.txt","r+b");
destFile=fopen("gb.txt","w+b");while(!feof(sourceFile))
{
fread(&high,1,1,sourceFile);
if(feof(sourceFile))
{
break;
}
if(high>=0x81 && high<=0xfe)
{
fread(&low,1,1,sourceFile);
if (low < 0xa1)
{
low = low - 0x40;
}
if (low >= 0xa1)
{
low = low - 0xa1 + 0x7e - 0x40 + 1;
}
fseek( tableFile,
2 * ((high -0x81) * (0xfe - 0xa1 + 1 + 0x7e - 0x40 + 1 ) + low),
SEEK_SET); fread(& high,1,1,tableFile);
fread(& low,1,1,tableFile);
fwrite(& high,1,1,destFile);
fwrite(& low,1,1,destFile);}
else
fwrite(& high,1,1,destFile);
}fclose(sourceFile);
fclose(tableFile);
fclose(destFile);
return;
}
以上程序在Win2000 VC++6.0 通过。用同样的方法,应该也可以将GB码转换为BIG5码,但是还没有找到GB的编码范围。
至于习惯用语的转换(软件->软体),建立一个相应的转换表应该可以初步实现。可是存在两个难点:1.转换表的建立2.在某些情况下会出现歧义。例如:软体动物->软件动物,还要考虑在词法分析的问题。
PS:附件里有一个.doc文件,下载后请将后缀名改为.rar(不支持.rar文件的上传J),包括一些源文件和测试用例。