GBK到UTF8编码转换C++实现
分类: c/c++2011-06-25 11:27 4382人阅读 评论(9) 收藏 举报 c++nullstringstdstringdeleteoutput- #include <iostream>
- #include <string>
- #include <fstream>
- #include <windows.h>
- using namespace std;
- string GBKToUTF8(const std::string& strGBK)
- {
- string strOutUTF8 = "";
- WCHAR * str1;
- int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
- str1 = new WCHAR[n];
- MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
- n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
- char * str2 = new char[n];
- WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
- strOutUTF8 = str2;
- delete[]str1;
- str1 = NULL;
- delete[]str2;
- str2 = NULL;
- return strOutUTF8;
- }
- string UTF8ToGBK(const std::string& strUTF8)
- {
- int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
- unsigned short * wszGBK = new unsigned short[len + 1];
- memset(wszGBK, 0, len * 2 + 2);
- MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8.c_str(), -1, wszGBK, len);
- len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
- char *szGBK = new char[len + 1];
- memset(szGBK, 0, len + 1);
- WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGBK, len, NULL, NULL);
- //strUTF8 = szGBK;
- std::string strTemp(szGBK);
- delete[]szGBK;
- delete[]wszGBK;
- return strTemp;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- string test("我们中国是个强大的名族,强大的动力来自每个人的支持");
- fstream output("test.txt",ios_base::out | ios_base::app);
- output << GBKToUTF8(test);
- //system("iconv -f GBK -t utf-8");
- return 0;
- }
wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式。
在Windows下,wchar_t占2个字节(byte);在Linux下,wchar_t占4个字节
wchar_t类型主要用在国际化程序的实现中,但它不等同于Unicode编码。Unicode编码的字符一般以wchar_t类型存储。
char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。
标准C++中的wprintf()函数以及iostream类库中的类和对象能提供wchar_t宽字符类型的相关操作。
函数介绍:
wcslen() 类似与char*类型作参数的strlen()函数 用来获取wchar_t*变量的长度(不包含终结符)
wcscpy() 类似与char*类型作参数的strcpy()函数 用来进行wchar_t*变量之间的复制
同样的还有 wcsncpy()
wcscmp() 类似与char*类型的strcmp()函数 用来对比两个wchar_t*变量的大小
wmemset() 类似与char*类型的memset()函数 用来初始化内存
wprintf() 类似与char*类型的printf()函数 用来输出wchar_t*字符串
简单记忆:
一般把char类型函数中的" str "替换为" wcs "即可
wcs:wide char string