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

2016-01-29 12:17 73 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

作者:Samoo

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


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

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)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);      ......}


来源:https://www.tulaoshi.com/n/20160129/1485433.html

延伸阅读
标签: 整容
问答 图钉提问: 天津做下额角收脸整形手术哪家好?天津做下额角收脸整形手术哪家好? ,天津做下额角收脸整形手术哪家好? 图老师解答: 病情分析:        天津的不太清楚,不过扬州的郭军博士这方面比较厉害,其他地方来院做的比较多。       指导意见:    ...
三种常见糖的不同功效和作用 糖是一种常见的调味品,在食物的烹调中糖占据着不可替代的地位。糖分很多种,如白糖、红糖、冰糖等。下面我们就来看看这三种糖分别有什么功效吧。 1.白糖 白糖是我们平常用得最多的调味品了,但因为白糖是经过提炼的,里边的营养素已经很少了,它主要起一个调味的作用。且白糖还含有大量的糖...
标签: Web开发
在CSS网页布局中,不可避免的会涉及到CSS伪类的问题。到底该如何正确的定义CSS伪类呢?虽然22333中有很多相关的介绍,但复习一下也无妨。大家看下面的代码就能明白。 a.22333com{text-decoration:none;} a.22333com:link{color:#f90;} a.22333com:hover{color:#fff;background-color:#FF5900;} a.22333com:active{color:#FF5900;} a href="htt...
标签: ASP
  众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页 提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来 被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的。 第一种:用RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll(win98路径)来注销该组 件。此方法过于狠毒,...
标签: 贷款 个人贷款
无抵押贷款 若有稳定的工作和收入,个人征信记录良好,可以申请无抵押贷款。根据多方了解,无抵押贷款额度一般月收入的10倍,王先生若想贷款20万,则需提供房产证、车辆行驶证等有效财力证明作为辅助材料,否则难以达到理想中的额度。 汽车抵押贷款 若名下的车子为全款车,且评估值在25万左右,可以申请汽车抵押贷款,因为此项贷...

经验教程

15

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部