windows平台下微软的库自带了一些api可用于几种编码格式间的互相转码,其实可以用一个iconv开源跨平台的转码库,那个方法更方便且统一。

使用前要引入头文件和命名空间

  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <windows.h>
  5. using namespace std;
  1. string GBKToUTF8(std::string& strGBK)
  2. {
  3. string strOutUTF8 = "";
  4. WCHAR * str1;
  5. int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
  6. str1 = new WCHAR[n];
  7. MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
  8. n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
  9. char * str2 = new char[n];
  10. WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
  11. strOutUTF8 = str2;
  12. delete[]str1;
  13. str1 = NULL;
  14. delete[]str2;
  15. str2 = NULL;
  16. return strOutUTF8;
  17. }
  1. string UTF8ToGBK(const std::string& strUTF8)
  2. {
  3. int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
  4. unsigned short * wszGBK = new unsigned short[len + 1];
  5. memset(wszGBK, 0, len * 2 + 2);
  6. MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8.c_str(), -1, wszGBK, len);
  7. len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
  8. char *szGBK = new char[len + 1];
  9. memset(szGBK, 0, len + 1);
  10. WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGBK, len, NULL, NULL);
  11. //strUTF8 = szGBK;
  12. std::string strTemp(szGBK);
  13. delete[]szGBK;
  14. delete[]wszGBK;
  15. return strTemp;
  16. }
  1. void UnicodeToUTF8(wchar_t* strW, char szUtf8[])
  2. {
  3. #ifdef _MSC_VER
  4. char* pElementText;
  5. int nTextLen;
  6. nTextLen =  WideCharToMultiByte(
  7. CP_UTF8,            // code page
  8. 0,            // performance and mapping flags
  9. strW,    // wide-character string
  10. -1,          // number of chars in string.
  11. NULL,     // buffer for new string
  12. 0,          // size of buffer
  13. NULL,     // default for unmappable chars
  14. NULL  // set when default char used
  15. );
  16. pElementText = new char[nTextLen+1];
  17. memset((void *)pElementText,0,sizeof(char)* (nTextLen+1));
  18. WideCharToMultiByte(
  19. CP_UTF8,            // code page
  20. 0,            // performance and mapping flags
  21. strW,    // wide-character string
  22. -1,          // number of chars in string.
  23. pElementText,     // buffer for new string
  24. nTextLen,          // size of buffer
  25. NULL,     // default for unmappable chars
  26. NULL  // set when default char used
  27. );
  28. sprintf_s(szUtf8, nTextLen, "%s", pElementText);
  29. delete[] pElementText;
  30. return ;
  31. #endif
  32. }

使用举例:

  1. string test("源编码格式需要转成目标编码格式");
  2. fstream output("test.txt"); //输出到文件
  3. output << GBKToUTF8(test);

一般来说utf8用的比较多,推荐都转成utf8

http://blog.csdn.net/u012234115/article/details/42292035

VC++互相转码GBK,unicode,utf8的更多相关文章

  1. 字符编解码的故事(ASCII,GBK,Unicode,Utf-8区别)

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一 ...

  2. ASCII,GB2312,GBK,Unicode,Utf-8

    1.ASCII:American Stardand Code for Information Interchange,是当时美国制定出来的一套编码系统,使用7位或8位二进制来表示西文字符,0-31以及 ...

  3. 编码 ASCII, GBK, Unicode+utf-8

    0. 1.参考 网页编码就是那点事 阮一峰 字符编码笔记:ASCII,Unicode 和 UTF-8 2.总结 美国 ASCII 码 发音: /ˈæski/ :128个字符,只占用了一个字节的后面7位 ...

  4. 码表的理解(ASCII,GBK,Unicode,UTF-8等)。

    以下任何言论都完全是个人的理解,如有雷同纯属巧合,如有错误,希望大家多多指出,共同学习!谢谢! 笔者是一个理解能力偏慢.稍钻牛角尖的程序员,什么东西都要从最基础理解起,一步一步向上理解,因此讲述时也是 ...

  5. ASCII, UNICODE, UTF-8, 字符集理解

    字符编码的发展历史 一个字节:最初一个字节的标准是混乱的,出现过4位.6位.7位的一字节标准,最终由于历史原因和物理存储需求(8位是2的3次方,方便物理存储),所以采用了8位为一个字节的标准. ASC ...

  6. ASCII码、ISO8859-1、Unicode、GBK和UTF-8 的区别

    为什么需要编码? 计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个 ...

  7. python编码知识初始_ASCII码,Unicode,Utf-8,GBK

    谍战片,电报,摩斯密码,相应规则(暗号),编码解码: 电脑底层是高低电平来传输信息(OSI七层模型,最底层):文件存储的本质,也是二进制,01010101 美国:ASCII码(8位表示一个字节 000 ...

  8. 字符编码详解及由来(UNICODE,UTF-8,GBK)[转帖]

    相信許多人對字符編碼都不是很了解,透過下文可以清晰的理解各种字符编码方式详解及由来. 一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS ...

  9. 字符编码详解及由来(UNICODE,UTF-8,GBK)

        一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS--是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's ...

随机推荐

  1. [tmux] Zoom and resize to view a particular pane within tmux

    Sometimes you'll want to zoom in on a specific pane within a tmux window. We'll learn to use C-b z t ...

  2. LaunchImage启动黑屏-模拟器可以,但是真机黑屏

    名称和尺寸都是对的,就是不显示.结果美工重新做一张图片就行了,想了半天都没想到是图片本身等问题啊

  3. 百度UEditor上传图片-再再总结一次

    本周,CSDN有个网友遇到了百度UEditor上传问题,最后商定付50元钱,我帮他解决这个问题.    他最初想自己搞定这个问题,结果搞了好多次,好几天,还是没能解决.    2015年1月17日8: ...

  4. N 个互异数的数组的平均逆序数

    N 个互异数的数组的平均逆序数为 N(N−1)/4 1. 简单证明 对于任意的数的表 L(5,8,9,6,4),以及其反序表 Lr(4,6,9,8,5),它们各自的逆序数分别为:6 ((5, 4), ...

  5. 超级简单的9patch

    转载请声明出处:http://blog.csdn.net/dawanganban 我们在有些应用中会用到将图片内部指定区域撑大的效果,如微信中的消息内容背景,这时候就要用到9patch图片,效果如下: ...

  6. QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015)

    原文:QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/snow_rain_ ...

  7. myeclipse 8.6 software and workspace center is currently not available

    Myeclipse安装EGit插件的时候偏偏遇到software and workspace center is currently not available 不用打开myeclipse  conf ...

  8. HDU1164_Eddy&#39;s research I【Miller Rabin素数测试】【Pollar Rho整数分解】

    Eddy's research I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. c语言学习笔记(4)——流程控制

    一.什么是流程控制 程序代码执行的顺序 流程控制分类 顺序执行 选择执行 定义 有选择的执行某些代码 分类 if switch 循环执行 定义 某些代码会被重复执行 分类 for while do w ...

  10. Mac版Visual Studio预览版

    来了,Mac版Visual Studio预览版开放下载 投递人 itwriter 发布于 2016-11-17 12:11 评论(7) 有1317人阅读 原文链接 [收藏] « » 微软前俩天宣布,推 ...