选择显示字体大小

用c语言实现常见的三种中文内码转换

     常见的中文内码一般有gb2312(简体中文),gbk和台湾那边用的big5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在ie中浏览,则要求安装繁体字库的支持。 网上也有很多中文内码的转换工具,什么专家,大师,巨匠之类所有光辉灿烂的名字都被使用了,但是在自己的程序中集成这些功能岂不是更好。以前曾广泛流传过使用码表来转换中文内码的code,但毕竟不完美,而且还要携带或内置一个巨大的表,浪费资源。windows中提供了multibytetowidechar和widechartomultibyte两兄弟函数,足可以搞定这些功能了。

以下四个函数分别实现:

  大五码转gbk码/gbk转大五码

  gb2312码转gbk码/gbk码转gb2312码

  于是有人要问了,为什么没有gb2312转big5和big5转gb2312呢,我们有gbk,可以做一下中转啊。可以将gb2312转成gbk,再将gbk转成big5,反之亦然。如果你嫌麻烦,可以自己写一个gb2big5/big52gb。

//---------------------------------------------------------------------------
// 大五码转gbk码:
// い地チ㎝瓣 --> 中華人民共和國
void __fastcall big52gbk(char *szbuf)
{
  if(!strcmp(szbuf, ""))
   return;
  int nstrlen = strlen(szbuf);
  wchar_t *pws = new wchar_t[nstrlen + 1];
  try
  {
   int nreturn = multibytetowidechar(950, 0, szbuf, nstrlen, pws, nstrlen + 1);
   bool bvalue = false;
   nreturn = widechartomultibyte(936, 0, pws, nreturn, szbuf, nstrlen + 1, "?", &bvalue);
   szbuf[nreturn] = 0;
  }
  __finally
  {
   delete[] pws;
  }
}
//---------------------------------------------------------------------------
// gbk转大五码
// 中華人民共和國 --> い地チ㎝瓣
void __fastcall gbk2big5(char *szbuf)
{
  if(!strcmp(szbuf, ""))
   return ;
  int nstrlen = strlen(szbuf);
  wchar_t *pws = new wchar_t[nstrlen + 1];
  try
  {
   multibytetowidechar(936, 0, szbuf, nstrlen, pws, nstrlen + 1);
   bool bvalue = false;
   widechartomultibyte(950, 0, pws, nstrlen, szbuf, nstrlen + 1, "?", &bvalue);
   szbuf[nstrlen] = 0;
  }
  __finally
  {
   delete[] pws;
  }
}
//----------------------------------------------------------------------------
// gb2312码转gbk码
// 中华人民共和国 --> 中華人民共和國
void __fastcall gb2gbk(char *szbuf)
{
  if(!strcmp(szbuf, ""))
   return;
  int nstrlen = strlen(szbuf);
  word wlcid = makelcid(makelangid(lang_chinese, sublang_chinese_simplified), sort_chinese_prc);
  int nreturn = lcmapstring(wlcid, lcmap_traditional_chinese, szbuf, nstrlen, null, 0);
  if(!nreturn)
   return;
  char *pcbuf = new char[nreturn + 1];
  try
  {
   wlcid = makelcid(makelangid(lang_chinese, sublang_chinese_simplified), sort_chinese_prc);
   lcmapstring(wlcid, lcmap_traditional_chinese, szbuf, nreturn, pcbuf, nreturn + 1);
   strncpy(szbuf, pcbuf, nreturn);
  }
  __finally
  {
   delete[] pcbuf;
  }
}
//---------------------------------------------------------------------------
// gbk码转gb2312码
// 中華人民共和國 --> 中华人民共和国
void __fastcall gbk2gb(char *szbuf)
{
  if(!strcmp(szbuf, ""))
   return;
  int nstrlen = strlen(szbuf);
  word wlcid = makelcid(makelangid(lang_chinese, sublang_chinese_simplified), sort_chinese_big5);
  int nreturn = lcmapstring(wlcid, lcmap_simplified_chinese, szbuf, nstrlen, null, 0);
  if(!nreturn)
   return;
  char *pcbuf = new char[nreturn + 1];
  try
  {
   wlcid = makelcid(makelangid(lang_chinese, sublang_chinese_simplified), sort_chinese_big5);
   lcmapstring(wlcid, lcmap_simplified_chinese, szbuf, nreturn, pcbuf, nreturn + 1);
   strncpy(szbuf, pcbuf, nreturn);
  }
  __finally
  {
   delete []pcbuf;
  }
}
//---------------------------------------------------------------------------
// 测试代码
void __fastcall tform1::button1click(tobject *sender)
{
  char szbuf[255];
  // 从gb2312转到gbk
  strcpy(szbuf, edit1->text.c_str());
  gb2gbk(szbuf);
  edit2->text = string(szbuf);
  // 从gb2312转到big5,通过gbk中转
  strcpy(szbuf, edit1->text.c_str());
  gb2gbk(szbuf);
  gbk2big5(szbuf);
  edit3->text = string(szbuf);
}


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons