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. [JS Compose] 5. Create types with Semigroups

    An introduction to concatting items via the formal Semi-group interface. Semi-groups are simply a ty ...

  2. js进阶正则表达式8量词(+*?{}的意义用法)(量词的对象是前面一个字符)

    js进阶正则表达式8量词(+*?{}的意义用法)(量词的对象是前面一个字符) 一.总结 1.量词的对象是前面一个字符 量词 描述 n+ 匹配任何包含至少一个 n 的字符串. n* 匹配任何包含零个或多 ...

  3. 【u210】kfc

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近Kfc新开了个KFC,该KFC提供N种食物,分别用1-N给这些食物编号,食物的价格与其编号有关,满 ...

  4. javaScript DOM编程经常使用的方法与属性

    DOM是Document Object Model文档对象模型的缩写.依据W3C DOM规范,DOM是一种与浏览器,平台,语言无关的接口,使得你能够訪问页面其它的标准组件. Node接口的特性和方法 ...

  5. NOIP 模拟 序列操作 - 无旋treap

    题意: 一开始有n个非负整数h[i],接下来会进行m次操作,第i次会给出一个数c[i],要求选出c[i]个大于0的数并将它们-1,问最多可以进行多少次? 分析: 首先一个显然的贪心就是每次都将最大的c ...

  6. echarts多条折线图和柱状图实现

    参考链接:echarts官网:http://echarts.baidu.com/原型图(效果图): 图片.png 代码: <!DOCTYPE html> <html> < ...

  7. BFKit:对常用 UIButton,UIColor,UIDevice,UIFont ,UIImage 等开发类进行了扩展

    BFKit对常用于开发的类进行了扩展,整合了多个常用的控件和开发所需要的功能,是一个通用性的类库.集成后可以帮助更快的App开发.有兴趣的同学可以看看哦. http://code4app.com/io ...

  8. [GeekBand] STL Traits 使用简介

    本文参考文献::GeekBand课堂内容,授课老师:张文杰 :C++ Templates  15章节 :网络资料: http://blog.csdn.net/my_business/article/d ...

  9. Notes on OpenSSL and Qt(ssl.pri,qsslocket_openssl_symbols.cpp)

    Libraries name of openssl? The "library" portion of OpenSSL consists of two libraries. On ...

  10. sparksql 用反射的方式将rdd转换成dataset/dataframe

    java public class ReflectionDemo { private static SparkConf conf = new SparkConf().setAppName(" ...