哪位朋友有简繁转换方面的经验或者示列代码(C++)请告诉兄弟一下。多谢了

解决方案 »

  1.   

    对Oo简繁转换进行了尝试。
    转换工作的关键是有一个记录每个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),包括一些源文件和测试用例。