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. java中关于File类的mkdirs()和FIle()构造方法在windows环境内网测试总结

    环境:环境是内网windows,传入路径的时候不带盘符,并且服务器的win10也不是超级管理员账户 关于File类的mkdirs()远程访问创建不了文件和路径的问题. 如果浏览器操作者是windows ...

  2. js如何实现动态显示表格数据(点奇数显示奇数单元格内容)

    js如何实现动态显示表格数据(点奇数显示奇数单元格内容) 一.总结 一句话总结: 1.动态指定表格中每个单元格的id,然后通过id可以获取每个单元格,然后对里面的innerHTML进行赋值. 2.弄了 ...

  3. Procedural graphics architectures and techniques

    BACKGROUND The evolution of graphics rendering technology has led to the development of procedural t ...

  4. erlang判断模块导出函数问题

    erlang本身提供一个接口,可以用来检查模块是否有导出函数,这个接口是erlang:function_exported/3,但是很多时候这个接口无法正常使用. 下面重现一下这个问题: 1> e ...

  5. 【BZOJ 1030】[JSOI2007]文本生成器

    [题目链接]:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1030 [题意] [题解] /* 先把AC自动机搞出来; 然后利用AC自动机,把 ...

  6. SpringBoot 打包成war包,部署到tomcat

    使用maven创建的springboot项目,默认是jar包,springboot还有自己带的tomcat.现在需要将项目打包,并部署到服务器tomcat下面. 1.修改pom.xml文件.将jar修 ...

  7. Windows应用程序的消息处理机制

    (1)操作系统接收到应用程序的窗体消息,将消息投递到该应用程序的消息队列中. (2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息. 取出消息后,应用程序能够对消息进行 ...

  8. Tower与DevCloud对比分析报告

    1. 产品介绍 Tower是彩程设计公司出品的远程办公和团队协作工具,为小企业和小团队提供简单.靠谱的在线协作服务. DevCloud是集华为研发实践.前沿研发理念.先进研发工具为一体的研发云平台.D ...

  9. 【21.28%】【codeforces 707D】Persistent Bookcase

    time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  10. android 创建一个新的每次project什么时候 请问自己主动 参加 V7依赖?

    android 创建一个新的每次project什么时候 请问自己主动 参加 V7依赖? 分析原因: 主要是由于.我之前的 SDK 的版本号 更新的有点高了.低版本号是不会有这样的问题g的,新版本号中g ...