本文主要讨论的是VC编译环境下,实现字符串和文件编码方式转换的实现,linux下请使用Strconv.

一、文件编码格式转换

//GB2312 编码文件转换成 Unicode:

if((file_handle = fopen(filenam,"rb")) != NULL)
        {
               //从GB2312源文件以二进制的方式读取buffer

numread = fread(str_buf_pool,sizeof(char),POOL_BUFF_SIZE,file_handle);
               fclose(file_handle);

//GB2312文件buffer转换成UNICODE

nLen   =MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,NULL,0);
              MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,(LPWSTR)str_unicode_buf_pool,nLen);

//组装UNICODE Little Endian编码文件文件头标示符"0xFF 0xFE"

//备注:UNICODE Big Endian编码文件文件头标示符"0xFF 0xFE"

//Little Endian与Big Endian编码差异此处不详述

unicode_little_file_header[0]=0xFF;
              unicode_little_file_header[1]=0xFE;

//存储目标文件

if((file_handle=fopen(filenewname,"wb+")) != NULL)
              {
                    fwrite(unicode_little_file_header,sizeof(char),2,file_handle);
                    numwrite = fwrite(str_unicode_buf_pool,sizeof(LPWSTR),nLen,file_handle);
                    fclose(file_handle);
              }
        }

二、字符串编码格式转换

//GB2312 转换成 Unicode:

wchar_t* GB2312ToUnicode(const char* szGBString)

{

UINT nCodePage = 936; //GB2312

int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);

wchar_t* pBuffer = new wchar_t[nLength+1];

MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);

pBuffer[nLength]=0;

return pBuffer;

}

//BIG5 转换成 Unicode:

wchar_t* BIG5ToUnicode(const char* szBIG5String)

{

UINT nCodePage = 950; //BIG5

int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);

wchar_t* pBuffer = new wchar_t[nLength+1];

MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);

pBuffer[nLength]=0;

return pBuffer;

}

//Unicode 转换成 GB2312:

char* UnicodeToGB2312(const wchar_t* szUnicodeString)

{

UINT nCodePage = 936; //GB2312

int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);

char* pBuffer=new char[nLength+1];

WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);

pBuffer[nLength]=0;

return pBuffer;

}

//Unicode 转换成 BIG5:

char* UnicodeToBIG5(const wchar_t* szUnicodeString)

{

UINT nCodePage = 950; //BIG5

int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);

char* pBuffer=new char[nLength+1];

WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);

pBuffer[nLength]=0;

return pBuffer;

}

//繁体中文BIG5 转换成 简体中文 GB2312

char* BIG5ToGB2312(const char* szBIG5String)

{

LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);

wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);

char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);

int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);

char* pBuffer = new char[nLength + 1];

LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);

pBuffer[nLength] = 0;

delete[] szUnicodeBuff;

delete[] szGB2312Buff;

return pBuffer;

}

//简体中文 GB2312 转换成 繁体中文BIG5

char* GB2312ToBIG5(const char* szGBString)

{

LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);

int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);

char* pBuffer=new char[nLength+1];

LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);

pBuffer[nLength]=0;

wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);

char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);

delete[] pBuffer;

delete[] pUnicodeBuff;

return pBIG5Buff;

}

三、API 函数:MultiByteToWideChar参数说明
           第一个参数为代码页, 用 GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文
           第二个参数为选项,一般用 0 就可以了
           第三个参数为 ANSI 字符串的地址, 这个字符串是第一个参数指定的语言的 ANSI 字符串 (AnsiString)
           第四个参数为 ANSI 字符串的长度,如果用 -1, 就表示是用 0 作为结束符的字符串
           第五个参数为转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度
           第六个参数为转化生成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。

http://blog.sina.com.cn/s/blog_54c49819010006j0.html~type=v5_one&label=rela_prevarticle

vc中GB2312,BIG5,Unicode编码转换相关推荐

  1. 关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决

    关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决 参考文章: (1)关于Laravel中使用response()方法调用json()返回数据un ...

  2. JavaScript中字符串与Unicode编码的互相转换

    JavaScript中字符串与Unicode编码的互相转换 这段代码演示了JavaScript中字符串与Unicode编码的转换: // 为了控制台的演示方便, 变量没有添加 var 定义 // 实际 ...

  3. C#-中的字符串及其编码转换

    C#中的字符串及其编码转换 (转自:http://blog.sina.com.cn/s/blog_498eab7d0100et7j.html) 根据查找的System.Text.Encoding类的属 ...

  4. html用unicode编码转换汉字,汉字与Unicode编码相互转换(Js版)

    Unicode编码转换工具 //ASCII 转换 Unicode function AsciiToUnicode(){ if (document.getElementById("conten ...

  5. Qt中文编码和QString类Unicode编码转换

    1 window中文GBK编码和Unicode编码转换 //GBK‐> QString QString str = QString::fromLocal8Bit("新浪微博" ...

  6. C#2005中如何把unicode编码的数字转化为EBCDIC编码

    简单介绍:而且在杨晓枫的内心心底处:就算是三把剑攻过来时:嗓子眼发紧!她根本就无力反抗?如梦.和我结婚!低吟道 本文写于:2012年09月30日;陕西周边自驾游路线 计划:而且在杨晓枫的内心心底处:就 ...

  7. bee 字符串转int_beego中gbk和utf8编码转换问题

    beego中gbk和utf8编码转换问题,这个问题非常重要,有时候从gbk采集过来转成utf8也非常重要. func Get_cate_urls(url string) (map[int]string ...

  8. JavaScript之Unicode编码转换小工具

    经常浏览别人的网页时,会看到重要的信息就被加密混淆了,常见的就类似\\u4faf\\u6587\\u658c .\u4faf\u6587\u658c.侯文斌等转换的字符串,相信正常人直接不会看懂的(火 ...

  9. C语言实现gbk/utf8/unicode编码转换

    细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4 Unicode与UTF-8互转(C语言实现) 不依赖任何系统API,用c语言实现gbk/utf8/uni ...

  10. html unicode编码转换,JS实现的Unicode编码转换操作示例

    本文实例讲述了JS实现的Unicode编码转换操作.分享给大家供大家参考,具体如下: Unicode编码转换 /* *js Unicode编码转换 */ var decToHex = function ...

最新文章

  1. springboot+druid+mybatis-Plus 配置详解
  2. vim/vi的使用(Ubuntu12.04)
  3. pkg-config的使用
  4. 通过输入流获取的xml格式字符串转为json和map格式
  5. BZOJ2837 : 小强的形状
  6. MPAI正式启动端到端的AI编码标准
  7. 使用IDEA 提交代码到svn
  8. BugkuCTF-MISC题cisco(writeup)
  9. pythongui界面复选框数值选择并求和_如何使用Python从图像中分离复选框按钮和复......
  10. 问题 L: The Hanoi Tower
  11. hdu 3635 Dragon Balls 并查集应用记录每个点的转移次数
  12. 寡头时代——新的希望还是?
  13. android 换机 iphone8,iPhone 8给了安卓用户一个换机理由
  14. Sudo: unable to initialize policy plugin 解决方法
  15. easyui学习笔记4—panel的实现
  16. @Resource和@Autowired小笔记
  17. php后端技术 有哪些,web后端开发技术有哪些 ?
  18. 关于Google Chrome浏览器离线安装包下载方法
  19. 【拍摄日志五】拍摄手法,画面构图,光影关系
  20. Spring项目使用mkcert制作自签名证书

热门文章

  1. 软件工程与计算II-13-详细设计中的模块化与信息隐藏
  2. 老男孩python培训第八期
  3. html页面判断是手机端访问,JS 判断手机端和pc端后跳转对应页面
  4. 【bearpi物联网应用笔记】hi3861通过mqtt连接onenet
  5. 资源链接-零基础入门深度学习
  6. 微信营销可借鉴的微博营销思路
  7. ENVI/ArcGIS栅格文件任意多边形裁剪
  8. 建筑八大员培训湖北标准员培训施工质量标准化的内容和方法
  9. 京东京麦交易平台设计与实现
  10. gtest里面的断言EXPECT_EQ和ASSERT_EQ的区别