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 }
  • 相关阅读:
    vs错误集合及解决方案
    使用内存映射文件进行EXE、DLL通信(非MFC)
    visual studio使用小技巧(以vs2012为例)
    GetModuleHandle(NULL)获取当前DLL模块基址?
    格式化输出中的%s和%S的陷阱
    关于字符编码
    远程附加调试服务的方法
    结构体内包含位段,其数据内存分布
    微信个人公众号开发-java
    Docker-常用基建的安装与部署
  • 原文地址:https://www.cnblogs.com/SwiftChocolate/p/13486046.html
Copyright © 2011-2022 走看看