常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持。网上也有很多中文内码的转换工具,但是在自己的程序中集成这些功能岂不是更好。Windows中提供了MultiByteToWideChar和WideCharToMultiByte两兄弟函数,足可以搞定这些功能了。

以下四个函数分别实现:
大五码转GBK码/GBK转大五码
GB2312码转GBK码/GBK码转GB2312码

于是有人要问了,为什么没有GB2312转BIG5和BIG5转GB2312呢,我们有GBK,可以做一下中转啊。可以将GB2312转成GBK,再将GBK转成BIG5,反之亦然。如果你嫌麻烦,可以自己写一个GB2BIG5/BIG52GB。

//---------------------------------------------------------------------------

 //  大五码转GBK码:

 //  い地チ㎝瓣 --> 中華人民共和國 
 
 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;

 } 
 

//---------------------------------------------------------------------------

 //  GBK转大五码

 //  中華人民共和國 --> い地チ㎝瓣 
 
 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;

 } 
 

//----------------------------------------------------------------------------

 //  GB2312码转GBK码

 //  中华人民共和国 --> 中華人民共和國 
 
 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;

 } 
 

//---------------------------------------------------------------------------

 //  GBK码转GB2312码

 //  中華人民共和國 --> 中华人民共和国 
 
 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语言实现常见的三种中文内码转换相关推荐

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

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

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

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

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

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

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

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

  5. C++内码转换的三种方法

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

  6. Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow

    摘要:聊一聊Git中的工作流--分支策略. 本文分享自华为云社区<Git工作流中常见的三种分支策略:GitFlow.GitHubFlow以及GitLabFlow>,原文作者:敏捷的小智. ...

  7. 分布式事务中常见的三种解决方案

    分布式事务中常见的三种解决方案 目录 一.分布式事务前奏 二.柔性事务解决方案架构 (一).基于可靠消息的最终一致性方案概述 (二).TCC事务补偿型方案 (三).最大努力通知型 三.基于可靠消息的最 ...

  8. 大数据可视化常见的三种错误

    可视化是获取并分享观点的绝佳途径,但很多大数据团队却没能选对正确的方式.可视化怎么会出现问题?原因很简单,因为存在多种可能破坏数据可视化效果的实施方式.下面我们就一同来探讨最为常见的三种错误实践. 错 ...

  9. 安川伺服总线通讯方式_plc通讯方式有哪三种?plc常见的三种通讯方式

    原标题:plc通讯方式有哪三种?plc常见的三种通讯方式 PLC = Programmable Logic Controller,可编程逻辑控制器,一种数字运算操作的电子系统,专为在工业环境应用而设计 ...

最新文章

  1. Android 之Tasks和Back Stack(任务和返回栈)
  2. BZOJ2055 80人环游世界
  3. MySQL的字符编码体系(一)——数据存储编码
  4. android陀螺仪测试工具,修改安卓陀螺仪和加速度计的sensor抽象层HAL
  5. 一对经典的时间获取客户/服务器程序
  6. asp.net core中使用cookie身份验证
  7. thinkphp的增删改查
  8. jquery插件图片浏览
  9. html5在线制作教程,HTML5 Canvas 制作动画
  10. CentOS7开机进入emergency mode
  11. 思科模拟器Cisco Packet Tracer 7.3 for Mac 安装和汉化(带安装包和汉化包)
  12. Java Web项目开发项目经验总结
  13. 2022年智慧城市行业概括及现状
  14. 七周成为数据分析师 第六周:统计学
  15. Django~1 一 什么是web框架?
  16. 【微信小程序】canvas生成分享图片海报模糊解决方法
  17. 对项目需求书撰写的一点理解
  18. android 全景拼接软件,DetuStitch(全景拼接软件)
  19. 2018千元内的UGP VR一体机开箱评测:ugp vr一体机怎么样真的好吗?
  20. USB-PD快充和QC快充的区别

热门文章

  1. java创建线程的2种方式
  2. Objective-C中的内存管理
  3. Linux下ibus-sunpinyin的安装及翻页快捷键设置!
  4. 话里话外:论持续跟踪和及时反馈
  5. 漂亮的验证码(.Net MVC)
  6. 配置 L2 Population - 每天5分钟玩转 OpenStack(114)
  7. xpwin7下的CMD命令
  8. 10年磨一剑,软件编程走火入魔之:把简单的功能做个彻彻底底、把劳动成果重复利用...
  9. ASP条件语句之IF语句
  10. 职场经典小故事-II