zoukankan      html  css  js  c++  java
  • C++ UFT-8和GB2312间的转换

    在这个帖子找到的代码 还蛮好用的 https://bbs.csdn.net/topics/391040755

    #include <codecvt>
    #include <locale>
    #include <vector>
    using namespace std;
    std::string gb2312_to_utf8(std::string const &strGb2312)
    {
        std::vector<wchar_t> buff(strGb2312.size());
    #ifdef _MSC_VER
        std::locale loc("zh-CN");
    #else
        std::locale loc("zh_CN.GB18030");
    #endif
        wchar_t* pwszNext = nullptr;
        const char* pszNext = nullptr;
        mbstate_t state = {};
        int res = std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >
            (loc).in(state,
                strGb2312.data(), strGb2312.data() + strGb2312.size(), pszNext,
                buff.data(), buff.data() + buff.size(), pwszNext);
    
        if (std::codecvt_base::ok == res)
        {
            std::wstring_convert<std::codecvt_utf8<wchar_t>> cutf8;
            return cutf8.to_bytes(std::wstring(buff.data(), pwszNext));
        }
    
        return "";
    
    }
    
    std::string utf8_to_gb2312(std::string const &strUtf8)
    {
        std::wstring_convert<std::codecvt_utf8<wchar_t>> cutf8;
        std::wstring wTemp = cutf8.from_bytes(strUtf8);
    #ifdef _MSC_VER
        std::locale loc("zh-CN");
    #else
        std::locale loc("zh_CN.GB18030");
    #endif
        const wchar_t* pwszNext = nullptr;
        char* pszNext = nullptr;
        mbstate_t state = {};
    
        std::vector<char> buff(wTemp.size() * 2);
        int res = std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >
            (loc).out(state,
                wTemp.data(), wTemp.data() + wTemp.size(), pwszNext,
                buff.data(), buff.data() + buff.size(), pszNext);
    
        if (std::codecvt_base::ok == res)
        {
            return std::string(buff.data(), pszNext);
        }
        return "";
    }
  • 相关阅读:
    8.5
    8.12
    8.11
    8.14
    8.15
    8.18
    8.16
    8.20
    Android新版NDK环境配置(免Cygwin)
    在Windows7上搭建Cocos2d-x win32开发环境
  • 原文地址:https://www.cnblogs.com/yuandaozhe/p/11511914.html
Copyright © 2011-2022 走看看