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. Windows Phone 8.1 FilePicker API

    在 Windows Phone 8.1 中,增加了 FilePicker 的方式与文件打交道,最大的亮点在于这种方式不仅可以浏览手机上的文件,还可以浏览符合协议的应用里的文件! 比如点击 OneDri ...

  2. 【u211】编码

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 假设phi(W)得到是按照以下算法编码后的结果: 1. 如果W的长度为1那么phi(W)即为W: 2. ...

  3. Java的面向AOP编程

    一. 引言 AOP(Aspect-Oriented Programming,面向切面的编程),是一种新型的编程范式,主张关注软件流程中的一个切面,将相同功能的代码整合打包在一起,减少系统的耦合性,增强 ...

  4. ios app初始化和数据迁移的设计思路

    整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件 ...

  5. [CSS] Specify grid columns, rows, and areas at once with the grid-template shorthand

    We can specify grid columns, rows, and areas in one property using the grid-template shorthand. .con ...

  6. [SQL]远程使用PostgreSQL Studio可视化查看PostgreSQL数据库

    1.下载 前往官网地址下载最新的PostgreSQL Studio,我下载的是 pgstudio_1.2-bin .zip,由于我的电脑里面没有tomcat. 假设电脑里有配置好tomcat,能够下载 ...

  7. SqlBulkCopy 帮助类

    using System;using System.Collections.Generic;using System.Configuration;using System.Data;using Sys ...

  8. ajax 发送请求无法重定向问题

    原因: ajax请求默认就是不支持重定向的,因为它是局部刷新,不重新加载页面. 解决方案: 开发中需要多处使用重定向的情况下,大多都是在Spring mvc 的拦截器中,或过滤器中使用,此方法是在sp ...

  9. PatentTips - Systems, methods, and devices for dynamic resource monitoring and allocation in a cluster system

    BACKGROUND  1. Field  The embodiments of the disclosure generally relate to computer clusters, and m ...

  10. tcp长连接和短连接

    tcp长连接和短连接 TCP在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立通过三次握手,释放则需要四 ...