zoukankan      html  css  js  c++  java
  • 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] = '';
    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] = '';
    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 }
  • 相关阅读:
    快速幂算法
    素数筛
    数论知识点总结
    ABOUT MY NAME
    CF1043F Make It One
    树形DP
    魔兽世界联盟8.1主线任务
    模板std::mutex用法:
    【转】正确的提问方式
    第一个Python游戏窗口
  • 原文地址:https://www.cnblogs.com/SwiftChocolate/p/13486046.html
Copyright © 2011-2022 走看看