zoukankan      html  css  js  c++  java
  • UTF8与std:string互转

      Ajax请求发送的UTF8编码字符串传到后台使用std:string进一步处理,如果包含中文会出现中文乱码的问题:

       

      特找了一下转码的解决方法,直接代码如下:

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    // UTF8转std:string
    // 转换过程:先将utf8转双字节Unicode编码,再通过WideCharToMultiByte将宽字符转换为多字节。
    std::string UTF8_To_string(const std::string& str) 

        
    int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1NULL0); 
        
    wchar_t* pwBuf = new wchar_t[nwLen + 1];    //一定要加1,不然会出现尾巴 
        memset(pwBuf, 0, nwLen * 2 + 2); 
        MultiByteToWideChar(CP_UTF8, 
    0, str.c_str(), str.length(), pwBuf, nwLen); 
        
    int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1NULLNULLNULLNULL); 
        
    char* pBuf = new char[nLen + 1]; 
        memset(pBuf, 
    0, nLen + 1); 
        WideCharToMultiByte(CP_ACP, 
    0, pwBuf, nwLen, pBuf, nLen, NULLNULL);

        std::string strRet = pBuf; 

        
    delete []pBuf; 
        
    delete []pwBuf; 
        pBuf = 
    NULL
        pwBuf = 
    NULL

        
    return strRet; 


    // std:string转UTF8
    std::string string_To_UTF8(const std::string& str) 

        
    int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1NULL0); 
        
    wchar_t* pwBuf = new wchar_t[nwLen + 1];    //一定要加1,不然会出现尾巴 
        ZeroMemory(pwBuf, nwLen * 2 + 2); 
        ::MultiByteToWideChar(CP_ACP, 
    0, str.c_str(), str.length(), pwBuf, nwLen); 
        
    int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1NULLNULLNULLNULL); 
        
    char* pBuf = new char[nLen + 1]; 
        ZeroMemory(pBuf, nLen + 
    1); 
        ::WideCharToMultiByte(CP_UTF8, 
    0, pwBuf, nwLen, pBuf, nLen, NULLNULL); 

        std::string strRet(pBuf); 

        
    delete []pwBuf; 
        
    delete []pBuf; 
        pwBuf = 
    NULL
        pBuf  = 
    NULL

        
    return
     strRet; 

    问题解决bingo!

  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10185889.html
Copyright © 2011-2022 走看看