C++(1) 数据编码格式转换(中文乱码)UTF8ToGBK
数据编码格式转换(中文乱码)UTF8ToGBK(适用于VC++,引用了cstring.h)
工具类 UTF8ToGBK.h/cpp
UTF8ToGBK.h
#pragma once #include <iostream> #include <stdio.h> //string是c++ 的头文件,其内包含了一个string类,string s1就是建立一个string类的对象 #include <string> //cstring.h 是对应于旧C 头文件的std 版本 #include <cstringt.h> #include <locale> #define LOGNEWLINE printf("\n") using namespace std; class UTF8ToGBK { public: UTF8ToGBK(void); ~UTF8ToGBK(void); //将unicode编码的string转换成wstring static wstring stringToWstring(const string text); //将utf8格式编码转化成gbk,vs2010的默认的编码格式 static string UTF8TOGBK(const string text); };
UTF8ToGBK.cpp
#include "UTF8ToGBK.h" UTF8ToGBK::UTF8ToGBK(void) { } UTF8ToGBK::~UTF8ToGBK(void) { } //将string转换成wstring wstring UTF8ToGBK::stringToWstring(const string str) { setlocale(LC_ALL, "chs"); const char* _Source = str.c_str(); size_t _Dsize = str.size() + 1; wchar_t *_Dest = new wchar_t[_Dsize]; wmemset(_Dest, 0, _Dsize); mbstowcs(_Dest,_Source,_Dsize); std::wstring result = _Dest; delete []_Dest; setlocale(LC_ALL, "C"); return result; } //当在WIN32 平台下,将utf8格式编码转化成gbk,vs2010的默认的编码格式 string UTF8ToGBK::UTF8TOGBK(const string text) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) wstring tes = stringToWstring(text); int asciSize = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),NULL,0,NULL,NULL); if (asciSize == ERROR_NO_UNICODE_TRANSLATION || asciSize == 0) { return string(); } char *resultString = new char[asciSize]; int conveResult = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),resultString,asciSize,NULL,NULL); if (conveResult != asciSize) { return string(); } string buffer = ""; buffer.append(resultString,asciSize); delete[] resultString; return buffer; #endif return text; }
测试调用:
string s_data = "可以"; string s_changedData = UTF8ToGBK::UTF8TOGBK(s_data);
浙公网安备 33010602011771号