1. 程式人生 > 實用技巧 >C++ 多位元組string轉UTF-8 string

C++ 多位元組string轉UTF-8 string

需求:資料庫資料格式為UTF-8,本地VS工程編碼字符集為多位元組字符集,匯入到本地csv檔案時需要轉化多位元組std::string為UTF-8 std::string

介面與實現:

 1 #include <Windows.h>
 2 #include <string>
 3 
 4 //以下為main需要的標頭檔案,介面實現不需要
 5 #include <iostream>
 6 #include <fstream>
 7 using namespace std;
 8 
 9 std::wstring MultiChartoWideChar(std::string
str) 10 { 11 int nLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), (int)(str.size()), NULL, 0); 12 WCHAR *pBuffer = new WCHAR[nLen + 1]; 13 MultiByteToWideChar(CP_ACP, 0, str.c_str(), (int)(str.size()), pBuffer, nLen); 14 pBuffer[nLen] = '\0'; 15 std::wstring wstr; 16 wstr.append(pBuffer);
17 delete[] pBuffer; 18 return wstr; 19 } 20 21 std::string WideChartoMultiChar(std::wstring wstr) 22 { 23 int nLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), (int)(wstr.size()), NULL, 0, NULL, NULL); 24 CHAR *pBuffer = new CHAR[nLen + 1]; 25 WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), (int
)(wstr.size()), pBuffer, nLen, NULL, NULL); 26 pBuffer[nLen] = '\0'; 27 std::string str; 28 str.append(pBuffer); 29 delete[] pBuffer; 30 return str; 31 } 32 33 std::string stringToUTF8string(std::string str) 34 { 35 std::wstring wstr = MultiChartoWideChar(str); 36 return WideChartoMultiChar(wstr); 37 } 38 39 int main() 40 { 41 std::string str = "C++字串編碼轉換"; 42 cout << "源字串:" << str << endl; 43 cout << "UTF8字串:"<< stringToUTF8string(str) << endl; 44 45 ofstream ofs; 46 ofs.open("utf8.txt", ios::trunc); 47 ofs << stringToUTF8string(str) << endl; 48 ofs.close(); 49 50 system("Pause"); 51 return 0; 52 }