VC中三种常见中文内码的转换方法(GB2312/GBK/BIG5)
我们平时常见的三种中文内码是:GB2312(简体中文)、GBK、BIG5(繁体中文)。网上有很多中文内码的专用转换工具。我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换。但论坛里经常有人问如何在自己的程序中集成这些功能呢?本文将介绍如何利用 Windows 提供的API 函数来实现。转换涉及到的 API 函数主要有两个:MultiByteToWideChar 和 WideCharToMultiByte。有关这两个函数的详细文档请参考 MSDN,本文不再赘述。
本文将介绍四个转换函数分别实现如下的转换:
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]; // 从 GB2312 转到 GBK // 从GB2312 转到 BIG5,通过 GBK 中转 ...... } |
VC中三种常见中文内码的转换方法(GB2312/GBK/BIG5)相关推荐
- 三种常见中文内码的转换方法
我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...
- c语言中文内码,C语言辅导:三种常见的中文内码的转换方法
我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...
- 用C语言实现常见的三种中文内码转换
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...
- c语言字符的内码是怎么表示,用C语言实现常见的三种中文内码转换
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...
- 常见的三种中文内码转换代码
作者:ccrun 更新:2005-10-13 浏览:11660 常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都 ...
- C++常见的三种中文内码转换代码
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...
- Android应用开发中三种常见的图片压缩方法
Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法private Bitmap comp ...
- 图像灰度化的三种常见方法源码
图像灰度化是图像处理很基础的一部分,在这里给出图像灰度化的三种常见方法的M源码,以供大家参考~ 平均值法,最大值法,加权平均值法 function f=MyGrayProcessing(Img) [m ...
- qt中文转字节_QT字符编码转换,可用于中文内码传输
串口.TCP.UDP传输中文字符时,先将字符串转内码.客户端接收到数据后,将内码转为字符串就OK了 QByteArray CommonFunction::strToInterCode(constQSt ...
最新文章
- 数据结构算法集---C++语言实现
- 【pycharm使用指南】pycharm 取消连按两下shift出现的全局搜索 | pycharm误触出搜索弹窗
- ofdm原理_什么是IQ调制,了解I/Q调制的基本原理及其主要特征 - 射频技术第2部分...
- CloudFoundry cf push命令报错误码223的解决方法
- spring 框架(一)
- java实现创建窗口
- 多叉树的前序遍历_多叉树的创建和遍历(为Trie树做准备)
- 产品运营:当你和上级发生争执你会怎么处理?
- 转帖:MySql日期格式化
- 网易云信 java demo_网易云信Web IM搭建(Demo)
- IOS根据经纬度算距离
- ajax标准完整写法
- h5策划书_DIYH5|3.12世界睡眠日H5策划方案
- hdwiki 编码规范
- MapReduce分片、分区、分组 傻傻分不清
- android2.2智能手机,Jelly 2:全球最小的Android 10 4G智能手机
- android慢快门相机,慢快门app-Slow Shutter Cam官网版(附教程)预约 _5577安卓网
- 未来5年IT产业及网络市场发展趋势分析
- 如何做一个“实用”的图像数据集
- 王半仙儿的日记-0001
热门文章
- 开发板——在X210开发板上进行裸机开发的流程
- 华盛证券软件测试工程师工资,【恒生电子工资】软件测试工程师待遇-看准网...
- Ubuntu 18.04 配置ibus中文拼音输入法
- 51单片机驱动ESP8266
- 图像处理算法python_图像处理——饱和度调整算法(python语言)
- Winform + Devexpress 实现看板效果
- 简易的java发邮件客户端
- antd Mobile Tabs 垂直布局 后台传入数据
- 智慧社区运维可视化管理平台主要有哪些功能?
- 无极符和鸿蒙符哪个好,无极仙途内丹属性哪个好? 单属性与双属性内丹对比详解...