VC中實現GB2312、BIG5、Unicode編碼轉換
阿新 • • 發佈:2019-02-09
//GB2312到UTF-8的轉換 static int GB2312ToUtf8(const char* gb2312, char* utf8) { 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); WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8, len, NULL, NULL); if(wstr) delete[] wstr; return len; } //UTF-8到GB2312的轉換 static int Utf8ToGB2312(const char* utf8,char* gb2312) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr, 0, len+1); MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, wstr, -1, gb2312, len, NULL, NULL); if(wstr) delete[] wstr; return len; } //GB2312到Unicode的轉換 static int GB2312ToUnicode(const char* gb2312, char* unicode) { UINT nCodePage = 936; //GB2312 int len = MultiByteToWideChar(nCodePage, 0, gb2312, -1, NULL, 0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr, 0, len+1); MultiByteToWideChar(nCodePage, 0, gb2312, -1, wstr, len); len = len*sizeof(wchar_t); memcpy(unicode, wstr, len); if(wstr) delete[] wstr; return len; } //Unicode到GB2312的轉換 static int UnicodeToGB2312(const char* unicode, int size, char*gb2312) { UINT nCodePage = 936; //GB2312 wchar_t* wstr = new wchar_t[size/2+1]; memcpy(wstr, unicode, size); int len = WideCharToMultiByte(nCodePage, 0, wstr, -1, NULL, 0, NULL, NULL); WideCharToMultiByte(nCodePage, 0, wstr, -1, gb2312, len, NULL, NULL); if(wstr) delete[] wstr; return len; } //UTF-8到Unicode的轉換 static int Utf8ToUnicode(const char* utf8, char*unicode) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr, 0, len+1); MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); memcpy(unicode, wstr, len); if(wstr) delete[] wstr; return len; } //Unicode到UTF-8的轉換 static int UnicodeToUtf8(const char* unicode, int size, char* utf8) { wchar_t* wstr = new wchar_t[size/2+1]; memcpy(wstr, unicode, size); int len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8, len, NULL, NULL); if(wstr) delete[] wstr; return len; }