需求:数据库数据格式为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 }