三种常见中文内码的转换方法

黑豆白秀

黑豆白秀

2016-01-29 12:17

三种常见中文内码的转换方法,三种常见中文内码的转换方法

三种常见中文内码的转换方法

作者:Samoo

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)


  我们平时常见的三种中文内码是:GB2312(简体中文)、GBK、BIG5(繁体中文)。网上有很多中文内码的专用转换工具。我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换。但论坛里经常有人问如何在自己的程序中集成这些功能呢?本文将介绍如何利用 Windows 提供的API 函数来实现。转换涉及到的 API 函数主要有两个:MultiByteToWideChar 和 WideCharToMultiByte。有关这两个函数的详细文档请参考 MSDN,本文不再赘述。

本文将介绍四个转换函数分别实现如下的转换:

Big5 = GBK GBK = Big5GB2312 = GBK

GBK = GB2312

  有关 GB2312 =〉BIG5 的转换以及 BIG5 =〉GB2312 的转换可以通过 GBK 间接实现。先将 GB2312 转成 GBK,再将 GBK 转成 BIG5,反之亦然。当然也可以自己实现它们之间的直接转换。

// Big5 = GBK:// い地チ㎝瓣 --> 中華人民共和國void 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 = Big5// 中華人民共和國 --> い地チ㎝瓣void 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 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 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;  }}// 调用示例   ......  char sourceEncode[255];  char szBuf[1024];  // 从 GB2312 转到 GBK  strcpy(szBuf, sourceEncode);  GB2GBK(szBuf);  // 从GB2312 转到 BIG5,通过 GBK 中转  strcpy(szBuf, sourceEncode);  GB2GBK(szBuf);  GBK2BIG5(szBuf);      ......}


(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

三种常见中文内码的转换方法

C语言教程 C语言函数
三种常见中文内码的转换方法

常见的三种分娩方式

分娩方式
常见的三种分娩方式

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

三种常见眉毛的画法

化妆
三种常见眉毛的画法

少妇常见的三种房事误区

怀孕
少妇常见的三种房事误区

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

中华养生常见的三种药膳

养生 健康 饮食养生
中华养生常见的三种药膳

最常见的三种早教误区

分娩
最常见的三种早教误区

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JSP入门教程(4)

JSP入门教程(4)

PSV《梦幻之星 新星》各区域素材入手方法一览

PSV《梦幻之星 新星》各区域素材入手方法一览
下拉加载更多内容 ↓