C++轉換unicode utf-8 gb2312編碼
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
windows開發環境下用VC++6.0 對unicode 、utf-8、 gb2312 三種編碼格式之間的轉換方法:
[cpp] view plaincopy
- #include <iostream>
- #include <string>
- #include <Windows.h>
- using namespace std;
- void unicodeToUTF8(const wstring &src, string& result)
- {
- int n = WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, 0, 0, 0, 0 );
- result.resize(n);
- ::WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, (char*)result.c_str(), result.length(), 0, 0 );
- }
- void unicodeToGB2312(const wstring& wstr , string& result)
- {
- int n = WideCharToMultiByte( CP_ACP, 0, wstr.c_str(), -1, 0, 0, 0, 0 );
- result.resize(n);
- ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, (char*)result.c_str(), n, 0, 0 );
- }
- void utf8ToUnicode(const string& src, wstring& result)
- {
- int n = MultiByteToWideChar( CP_UTF8, 0, src.c_str(), -1, NULL, 0 );
- result.resize(n);
- ::MultiByteToWideChar( CP_UTF8, 0, src.c_str(), -1, (LPWSTR)result.c_str(), result.length());
- }
- void gb2312ToUnicode(const string& src, wstring& result)
- {
- int n = MultiByteToWideChar( CP_ACP, 0, src.c_str(), -1, NULL, 0 );
- result.resize(n);
- ::MultiByteToWideChar( CP_ACP, 0, src.c_str(), -1, (LPWSTR)result.c_str(), result.length());
- }
- void printByte(string str)
- {
- int i=0;
- for (i=0; i<str.length(); i++)
- {
- printf("%X ",(unsigned char)str.at(i));
- }
- printf("\n");
- }
- void wprintByte(wstring str)
- {
- int i=0;
- for (i=0; i<str.length()*sizeof(wchar_t); i++)
- {
- printf("%X ",*((unsigned char*)str.c_str()+i));
- }
- printf("\n");
- }
- int main()
- {
- string strText = "AB漢字";
- string strUTF8;
- wstring wstrUnicode;
- string strGB2312;
- gb2312ToUnicode(strText, wstrUnicode);
- printf("Unicode=");
- wprintByte(wstrUnicode);
- unicodeToUTF8(wstrUnicode, strUTF8);
- printf("UTF-8 =");
- printByte(strUTF8);
- utf8ToUnicode(strUTF8,wstrUnicode);
- printf("Unicode=");
- wprintByte(wstrUnicode);
- unicodeToGB2312(wstrUnicode,strGB2312);
- printf("GB2312 =");
- printByte(strGB2312);
- return 0;
- }
這里用“AB漢字”這樣一個字符串做測試,它的ASCII編碼為41 42 BA BA D7 D6
輸出結果: