用C语言实现常见的三种中文内码转换
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持。网上也有很多中文内码的转换工具,但是在自己的程序中集成这些功能岂不是更好。Windows中提供了MultiByteToWideChar和WideCharToMultiByte两兄弟函数,足可以搞定这些功能了。
以下四个函数分别实现:
大五码转GBK码/GBK转大五码
GB2312码转GBK码/GBK码转GB2312码
于是有人要问了,为什么没有GB2312转BIG5和BIG5转GB2312呢,我们有GBK,可以做一下中转啊。可以将GB2312转成GBK,再将GBK转成BIG5,反之亦然。如果你嫌麻烦,可以自己写一个GB2BIG5/BIG52GB。
//---------------------------------------------------------------------------
// い地チ㎝瓣 --> 中華人民共和國
void __fastcall 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;
}
}
//---------------------------------------------------------------------------
// 中華人民共和國 --> い地チ㎝瓣
void __fastcall 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;
}
}
//----------------------------------------------------------------------------
// 中华人民共和国 --> 中華人民共和國
void __fastcall 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;
}
}
//---------------------------------------------------------------------------
// 中華人民共和國 --> 中华人民共和国
void __fastcall 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;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject * Sender)
{
char szBuf[ 255 ];
// 从GB2312转到GBK
strcpy(szBuf, Edit1 -> Text.c_str());
GB2GBK(szBuf);
Edit2 -> Text = String(szBuf);
// 从GB2312转到BIG5,通过GBK中转
strcpy(szBuf, Edit1 -> Text.c_str());
GB2GBK(szBuf);
GBK2BIG5(szBuf);
Edit3 -> Text = String(szBuf);
}
注意,请不要使用String类的c_str()作为上述几个函数的传入参数。
用C语言实现常见的三种中文内码转换相关推荐
- c语言字符的内码是怎么表示,用C语言实现常见的三种中文内码转换
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...
- 常见的三种中文内码转换代码
作者:ccrun 更新:2005-10-13 浏览:11660 常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都 ...
- C++常见的三种中文内码转换代码
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转 ...
- c语言中文内码,C语言辅导:三种常见的中文内码的转换方法
我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...
- C++内码转换的三种方法
我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...
- Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow
摘要:聊一聊Git中的工作流--分支策略. 本文分享自华为云社区<Git工作流中常见的三种分支策略:GitFlow.GitHubFlow以及GitLabFlow>,原文作者:敏捷的小智. ...
- 分布式事务中常见的三种解决方案
分布式事务中常见的三种解决方案 目录 一.分布式事务前奏 二.柔性事务解决方案架构 (一).基于可靠消息的最终一致性方案概述 (二).TCC事务补偿型方案 (三).最大努力通知型 三.基于可靠消息的最 ...
- 大数据可视化常见的三种错误
可视化是获取并分享观点的绝佳途径,但很多大数据团队却没能选对正确的方式.可视化怎么会出现问题?原因很简单,因为存在多种可能破坏数据可视化效果的实施方式.下面我们就一同来探讨最为常见的三种错误实践. 错 ...
- 安川伺服总线通讯方式_plc通讯方式有哪三种?plc常见的三种通讯方式
原标题:plc通讯方式有哪三种?plc常见的三种通讯方式 PLC = Programmable Logic Controller,可编程逻辑控制器,一种数字运算操作的电子系统,专为在工业环境应用而设计 ...
最新文章
- Android 之Tasks和Back Stack(任务和返回栈)
- BZOJ2055 80人环游世界
- MySQL的字符编码体系(一)——数据存储编码
- android陀螺仪测试工具,修改安卓陀螺仪和加速度计的sensor抽象层HAL
- 一对经典的时间获取客户/服务器程序
- asp.net core中使用cookie身份验证
- thinkphp的增删改查
- jquery插件图片浏览
- html5在线制作教程,HTML5 Canvas 制作动画
- CentOS7开机进入emergency mode
- 思科模拟器Cisco Packet Tracer 7.3 for Mac 安装和汉化(带安装包和汉化包)
- Java Web项目开发项目经验总结
- 2022年智慧城市行业概括及现状
- 七周成为数据分析师 第六周:统计学
- Django~1 一 什么是web框架?
- 【微信小程序】canvas生成分享图片海报模糊解决方法
- 对项目需求书撰写的一点理解
- android 全景拼接软件,DetuStitch(全景拼接软件)
- 2018千元内的UGP VR一体机开箱评测:ugp vr一体机怎么样真的好吗?
- USB-PD快充和QC快充的区别