我们平时常见的三种中文内码是:GB2312(简体中文)、GBK、BIG5(繁体中文)。网上有很多中文内码的专用转换工具。我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换。但论坛里经常有人问如何在自己的程序中集成这些功能呢?本文将介绍如何利用 Windows 提供的API 函数来实现。转换涉及到的 API 函数主要有两个:MultiByteToWideChar 和 WideCharToMultiByte。有关这两个函数的详细文档请参考 MSDN,本文不再赘述。本文将介绍四个转换函数分别实现如下的转换:Big5 => GBK GBK => Big5 GB2312 => GBKGBK => 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 转到 GBKstrcpy(szBuf, sourceEncode);GB2GBK(szBuf);// 从GB2312 转到 BIG5,通过 GBK 中转strcpy(szBuf, sourceEncode);GB2GBK(szBuf);GBK2BIG5(szBuf);......}      
												

三种常见中文内码的转换方法相关推荐

  1. VC中三种常见中文内码的转换方法(GB2312/GBK/BIG5)

    我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...

  2. c语言中文内码,C语言辅导:三种常见的中文内码的转换方法

    我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...

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

    常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...

  4. c语言字符的内码是怎么表示,用C语言实现常见的三种中文内码转换

    常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...

  5. 常见的三种中文内码转换代码

    作者:ccrun    更新:2005-10-13    浏览:11660 常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都 ...

  6. C++常见的三种中文内码转换代码

    常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...

  7. 图像灰度化的三种常见方法源码

    图像灰度化是图像处理很基础的一部分,在这里给出图像灰度化的三种常见方法的M源码,以供大家参考~ 平均值法,最大值法,加权平均值法 function f=MyGrayProcessing(Img) [m ...

  8. qt中文转字节_QT字符编码转换,可用于中文内码传输

    串口.TCP.UDP传输中文字符时,先将字符串转内码.客户端接收到数据后,将内码转为字符串就OK了 QByteArray CommonFunction::strToInterCode(constQSt ...

  9. 文内码转换巨匠增强版 官方版

    中文内码转换巨匠增强版官方版是一款操作简单的中文内码转换软件.中文内码转换巨匠增强版官方版是在原普通版的基础上全新开发而成,软件与原普通版相比,中文内码转换巨匠增强版官方版具有功能更超强.用途更广泛. ...

最新文章

  1. boost::gregorian模块实现测试时钟的测试程序
  2. PHP zendframework phpunit 深入
  3. p4.pm p4python p4perl p4api 的使用方法
  4. nodejs里的module.exports和exports
  5. SystemC 代码添加和测试方法
  6. numpy.cov() 计算协方差矩阵
  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:响应式的列重置
  8. HP的“高端”磁带库!
  9. Pandas——数据可视化
  10. 7.数据结构 --- 图
  11. 计算机在线拥有,电路在线计算器
  12. 腾讯视频TS文件转MP4
  13. 知识问答题小程序头脑王者源码
  14. 计算机室无线网络,在小型办公室中设置无线网络
  15. 什么是mysql的安装版本的_一:MySQL基本介绍及安装
  16. 健身网站php,基于WEB的健身网站的设计与实现
  17. DATA GUARD代码(部分)
  18. iOS 编译过程的原理和应用
  19. WiFi、WiMAX、WBMA与3G的比较(图)
  20. ISIS路由协议详解(特征、与OSPF对比、拓扑结构、专业术语、路由器分类、网络类型、DIS、报文类型及抓包、邻居关系、路由渗透、路由过载OL位、ISIS认证分类、ISIS管理标签以及各种实验等)

热门文章

  1. mysql查询周数_MySQL:查询中从周数开始的周日期范围
  2. Caffe学习系列(21):caffe图形化操作工具digits的安装与运行
  3. 【面向代码】学习 Deep Learning Convolution Neural Network(CNN)
  4. Git笔记(三)——[cherry-pick, merge, rebase]
  5. 论文返修(response letter)最有用的开场白
  6. java学习笔记8--接口总结
  7. 用 Hadoop 进行分布式并行编程, 第 2 部分 程序实例与分析
  8. Shell教程(五):替代、引用机制、输入输出重定向
  9. Flask出现Error code 400, message Bad request syntax异常
  10. PHP中使用ActiveMQ实现消息队列