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

Big5 => GBK
GBK => Big5
GB2312 => 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);

......

}

Big5 = GBK GBK = Big5 GB2312 = GBK GBK = GB2312 互转相关推荐

  1. UTF-8、GB2312、GB18030、GBK和BIG5等字符集编码范围的具体说明

    一预备知识 1,字符:字符是抽象的最小文本单位. 它没有固定的形状(可能是一个字形),而且没有值. "A"是一个字符,""(德国.法国和许多其他欧洲国家通用货 ...

  2. 【图形处理】字模软件与汉字取模(GB2312、GBK,BIG5)(草稿)

    由于需要在LCD显示屏上绘制汉字,找了N多的字模软件. 现将个人对汉字取模的实现过程及软件使用写出来,不足之处,望留言指正. 导论 文章将按照汉字编码.图像取模. 一.汉字编码 1234 GB2312 ...

  3. [zz]GB2312/GBK/GB18030/BIG5 的历史

    http://iask.sina.com.cn/b/7837434.html?from=related GBK中的"K"是扩展的意思,而GB2312中的"2312&quo ...

  4. 一文搞清楚中文编码们:GB2312, GBK, GB18030, Big5

    目录 1. GB2312 2. Big5 3. GBK 4. GB18030 5. CJK 前一篇我转载的这个博主的博文:ANSI是什么编码?中有这样一段小故事: 话说计算机是由美国佬搞出来的嘛,他们 ...

  5. GB2312、GBK、BIG5、Unicode及字符编码基础知识

    GB2312.GBK.BIG5.Unicode及字符编码基础知识 在搜狗的设置里面有个选项,要用户选择使用GBK还是GB2312,论坛里面常常有人要求输入法支持BIG5编码,也有人提到 Unicode ...

  6. GB2312/GBK/GB18030/BIG5 的历史

    GBK中的"K"是扩展的意思,而GB2312中的"2312"以及GB18030中的"18030"是国家标准的代号,BIG5是港澳台地区的编码 ...

  7. CVCode简繁转换的扩展:GBK与Big5转换

    CVCode使用码表对照的方式实现简繁转换,在Unicode盛行的今天仍然是有其现实意义的.   较常见的应用是,企业内有台籍员工,也有大陆员工,而且简体和繁体的OS都有使用,这样在MIS系统中如何保 ...

  8. GB2312、GBK与UTF-8的区别

    GB2312.GBK与UTF-8的区别 这是一个异常经典的问题,有无数的新手站长每天都在百度这个问题,而我,作为一个"伪老手"站长,在明白这个这个问题的基础上,有必要详细的解答一下 ...

  9. 字符集:ASCII、GB2312、GBK、GB18030、Unicode

    文章目录 1 字符集.代码点.编码的概念 2 字符集发展的脉络 2.1 最早是ASCII 2.2 各个国家后续推出的编码表 2.3 ANSI到底是什么编码 3 ASCII 3.1 ASCII字符集简介 ...

  10. 字符集编码详解【ASCII 、GB2312、GBK、GB18030、unicode、UTF-8】(转)

    ASCII字符集编码 ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符. 只支持ASCI ...

最新文章

  1. 太任性!17 岁少年买不到回国机票,因“泄愤”攻击航司系统,被判刑 4 年
  2. 批量关闭电脑有害端口方法
  3. HU 3496 Watch The Movie---二维费用
  4. 随机发牌_用Python制作4人扑克牌发牌游戏
  5. 副本的leader选举
  6. Speed Reading(POJ-3619 )
  7. 腾讯云实验之搭建 GIT 服务器教程
  8. servlet25配置和30
  9. Fiddler 手机抓包详解
  10. Jmeter之web压力测试
  11. 404页面是什么意思?怎么正确设置?
  12. Flink任务失败,检查点失效:Exceeded checkpoint tolerable failure threshold.
  13. 中学计算机教师人生职业规划,初中教师个人职业发展规划
  14. HTML5在线摄像头应用
  15. CSS-margin外边距
  16. 微信小程序api的封装使用
  17. 绝了!多个激光雷达和相机的快速且鲁棒的外参标定方法(代码开源)
  18. 技巧 | 如何画出漂亮的深度学习模型图
  19. 安卓studio访问mysql数据库_小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库-Go语言中文社区...
  20. python版海康摄像头抓拍图片

热门文章

  1. Editor.md安装使用(markdown)
  2. 一个点围绕另一个点旋转后的坐标
  3. openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频
  4. python 均方误差_方差、标准差、均方差、均方误差
  5. 望尽天涯路之从理财角度看高可用
  6. 第三方在线地图源有哪些?
  7. windows11 版本 business editions consumer editions 区别介绍
  8. PCI DSS合规性审核认证服务
  9. Access point name(APN)
  10. 程序员笔记工具 cherrytree