CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问VC有没有直接的API可以实现简体与繁体字的转换?

楼主w5meng(wingfancy)2003-09-02 22:40:06 在 VC/MFC / 基础类 提问

请问VC有没有直接的API可以实现简体与繁体字的转换?  
   
  或者简单与GBK,繁体与GBK之间的相互转换功能?  
   
  谢谢啦!  
  问题点数:0、回复次数:13Top

1 楼wuzhiwen(蚕蛹)回复于 2003-09-03 12:43:53 得分 0

//   j2f.cpp   :   简体(gb)==>繁体==>big5的过程  
  //   反向转换是类似的.  
  //   注意直接从简体-->big5不能做到一一对应.会有很多?出现,  
  //   故此需要先转成繁体.再转成big5.  
  //   我感觉这种方法应当和winnt或office里提供的繁简或字符集互转是一致的.  
   
  #include   "stdafx.h"  
  #include   <windows.h>  
  #include   <iostream>  
  #include   <string>  
  #include   <algorithm>  
  #include   <conio.h>  
  using   namespace   std;  
   
  void   j2f(const   string   &s)  
  {  
          int   n=s.length   ();          
          int   r=LCMapString(  
                  MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),  
                  LCMAP_TRADITIONAL_CHINESE,  
                  s.c_str   (),s.length   (),NULL,0);  
          if   (!r)   cout   <<"error   :"<<GetLastError()<<endl;  
          char   *ft=new   char[r+1];  
          r=LCMapString(  
                  MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),  
                  LCMAP_TRADITIONAL_CHINESE,  
                  s.c_str   (),s.length   (),ft,r+1);//这个api搞掂简体转繁体,下面会打印繁体出来  
          if   (r)   {  
                  ft[r]=0;                  
                  cout<<ft<<endl;  
                  wchar_t   *pws=new   wchar_t[r+1];  
                  int   r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);  
                  BOOL   f=FALSE;  
                  r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5  
                  ft[r1]=0;  
                  cout<<ft<<"(";                  
                  for   (int   i=0;i<r1;i++)   {  
                          cout<<"";  
                          printf("0x%02x   ",(BYTE)ft[i]);  
                  }  
                  cout<<")"<<endl;  
                  delete   []   pws;  
          }  
           
          delete   []ft;  
  }  
   
  //从标准输入简体国标-->big5繁体标准输出,输入两个空行退出  
  int   main(int   argc,   char*   argv[])  
  {          
           
          for(;;){  
                  char   line[1024];  
                  cin.getline   (line,sizeof(line));  
                  string   s(line);          
                  if   (!cin   ||s.length   ()==0)   break;  
                  j2f(s);  
          }  
          _getch();  
          return   0;  
  }  
  Top

2 楼w5meng(wingfancy)回复于 2003-09-03 14:21:12 得分 0

能否将反向转换的代码也给我?谢谢啦!Top

3 楼WvW(我有一个好老婆^_^)回复于 2003-09-03 18:16:35 得分 0

makr  
   
  高人呀Top

4 楼w5meng(wingfancy)回复于 2003-09-04 09:28:39 得分 0

是呀,有人会吗?反向转换?Top

5 楼papaya_stone(^_^)shentong(^_^)回复于 2003-09-04 09:36:54 得分 0

 
  《BIG5码到BG码转换技术》    
  日期:2001.10.27   浏览:29   [打印]      
     
    中文因为数量太多,所以与英文用ASCII码一个字节表示不同,它使用两个字节来表示。通过计算这两个字节,我们可以得到其表示的汉字在中文字库中的位置。读取该位置的若干字节,以获得表示这个汉字的点阵信息。有了这些信息,就可以分别在DOS或WINDOWS中显示该汉字。事实上,在文本文件中保存的就是每个汉字对应的两个字节编码,而显示问题由中文操作系统自动解决。  
   
    汉字编码并不统一,我们使用的是GB码,而台湾地区使用的是BIG5码。BIG5码文件中保存的是汉字相应的BIG5编码,GB码文件中保存的是汉字相应的GB编码(这也就是“乱码现象”的来由)。所以转换工作的关键是有一个记录每个BIG5编码对应GB编码的码表文件。  
   
  第一步   制作码表文件  
   
    BIG5码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE,共126种。第二个字节的范围分别为0X40-0X7E,0XA1-0XFE,共157种。也就是说,利用这两个字节共可定义出   126   *   157=19782种汉字。这些汉字的一部分是我们常用到的,如一、丁,这些字我们称为常用字,其BIG5码的范围为0XA440-0XC671,共5401个。较不常用的字,如滥、调,我们称为次常用字,范围为   0XC940-0XF9FE,共7652个,剩下的便是一些特殊字符。  
  制作码表文件的原理是这样的:首先将所有的BIG5编码写入一个文件,然后,使用具有BIG5码到GB码转换功能的软件,如地球村、东方快车、四通利方,将文件转换为GB码文件,即得到码表文件。  
   
       下面的源程序将所有可能的BIG5编码(0XA100-0XFEFF)写入文件“Table.TXT”。  
   
  //TURBO   C++   3.0  
  #include   <Stdio.h>  
  #include   <stdlib.h>  
  void   main(){  
  FILE   *   codefile;  
  int   i,j,k;  
  codefile=fopen("table.txt","w+b");  
  for   (i=0xa1;i<=0xfe;I++){  
  for(j=0x00;j<=0xff;j++){  
  fwrite(&   i,1,1,codefile);  
  fwrite(&   j,1,1,codefile);}  
  }  
  fclose(codefile);  
  return;  
  }  
    运行地球村、东方快车或四通利方,将“Table.txt”从BIG5码转换为GB码,即获得码表文件。  
   
   
  第二步   转换  
   
    下面的源程序,将BIG5码文件转换为GB码文件。  
   
  //TURBO   C++3.0  
  #include   <stdio.h>  
  #include   <stdlib.h>  
  void   main(){  
  int   que,   wei;  
  FILE   *   sourcefile;  
  FILE   *   tabfile;  
  FILE   *   destfile;  
  sourcefile   =   fopen("big.txt',   "r+b");  
  //BIG5   码文件  
  tabfile   =   fopen("table.txt",   'r+b");  
  //码表文件  
  destfile   =   fopen("gb.txt","w+b");  
  //转换生成的GB码文件  
  while   (!feof(sourcefile)){  
  fread(&   que,1,1,sourcefile);  
  if   (feof(sourcefile)){  
  break;   }  
  if   (que>   =0xa1   &&   que   <=0xfe)  
  //叛断是否汉字(BIG5编码)  
  {fread(&   wei,1,1,sourcefile);  
  if   (wei<0xa1)   wei   =   wei   -   0x40;  
  if   (wei>=0xa1)   wei   =   wei   -   0xa1   +   0x7e   -   0x40   +   1;  
  fseek(tabfile,   2   *   ((que   -0xa1)   *   (0xfe   -   0xa1   +   1   +   0x7e   -   0x40   +   1   )   +   wei),   SEEK_SET);  
  fread(&   que,1,1,tabfile);  
  fread(&   wei,1,1,tabfile);  
  fwrite(&   que,1,1,destfile);  
  fwrite(&   wei,1,1,destfile);  
  }  
  else  
  fwrite(&   que,1,1,destfile);   //处理英文  
  }  
  fclose(sourcefile);  
  fclose(tabfile);  
  fclose(destfile);  
  return;  
  }  
   
    以上程序在Win95/97,TC3.0   通过。稍加修改,也可用于CB、VC或VB程序中。用同样的方法,我们也可以将GB码转换为BIG5码。    
     
   
  Top

6 楼w5meng(wingfancy)回复于 2003-09-04 11:38:26 得分 0

我是想用直接的API进行处理而不需要码表。  
  如wuzhiwen(蚕蛹)的那样实现了GB->Big5,有谁能够写出Big5->GB的代码?  
   
  谢谢啦!Top

7 楼dawndu(东南飞)回复于 2003-09-04 13:44:22 得分 0

upTop

8 楼zhi_liu6(野战炮)回复于 2003-09-04 14:46:05 得分 0

10条语句搞定  
  gb   ->   unicode   ->   big5Top

9 楼zhi_liu6(野战炮)回复于 2003-09-04 14:47:04 得分 0

反过来也一样  
  big5   ->   unicode   ->   gb  
  需要系统装了big5支持Top

10 楼w5meng(wingfancy)回复于 2003-09-04 15:59:45 得分 0

zhi_liu6(野战炮),可否贴出代码来?  
   
  劳驾啦,谢谢!Top

11 楼sjd107(phil)回复于 2003-09-04 16:36:55 得分 0

upTop

12 楼w5meng(wingfancy)回复于 2003-09-04 23:20:45 得分 0

再顶一下!Top

13 楼w5meng(wingfancy)回复于 2003-09-05 09:10:06 得分 0

up.Top

相关问题

  • 如何把软件中简体字转换为繁体字?
  • 急寻:简体字转换为繁体字的工具.
  • 怎样做简体字与繁体字的转换
  • 谁能提供简体字和繁体字的内码表?
  • 怎么转换繁体字成为简体?
  • 如何实现简体字和繁体字的转换?
  • 请教繁体字与简体字互转的原理
  • 哪里有把软件中简体字转换为繁体字的工具?
  • 如何把PB程序中的简体字转换为繁体字?
  • 请问,如何将简体字的网页,转换为繁体字的网页?

关键词

  • 转换
  • 编码
  • 文件
  • 汉字
  • 简体
  • api
  • vc
  • 中文
  • big5
  • 码表

得分解答快速导航

  • 帖主:w5meng

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo