需求:数据库数据格式为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 }
原文链接: https://www.cnblogs.com/SwiftChocolate/p/13486046.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/201371
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!