对GBK转UTF-8的需求,相信很多通过C++开发windows程序的程序员都会遇到,
一个好的转换方式是直接调用windows API函数MultiByteToWideChar进行实现。
下面对MultiByteToWideChar专门封装成一个类,可以很方便将GBK转换为UTF-8。
class GBK2UTF8{ public: GBK2UTF8(string gbk) { const char *gb2312 = gbk.c_str(); int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr, 0, len+1); MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len); len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len+1]; memset(str, 0, len+1); WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL); if(wstr) { delete[] wstr; } m_strTransfered = string(str); if (str) { delete[] str; } } ~GBK2UTF8() { } public: string GetUTF8() { return m_strTransfered; } private: string m_strTransfered; }; |
转码时,定义GBK2UTF8类对象,传入GBK编码的字符串,再调用函数GetUTF8()即可获取UTF-8格式字符串。
例:
std::string str = "测试字符串";
GBK2UTF8 gbk2Utf8(str);
/** UTF-8格式的字符串 */
str = gbk2Utf8.GetUTF8();