• 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 "";
    }
  • 相关阅读:
    Vue-router 报NavigationDuplicated的可能解决方案
    go 数据类型转换
    在vscode 之中使用 GO MOD
    javascript格式化
    Mac node-sass 安装失败“v8::String::Utf8Value”
    Django 使用gunicorn 和 supervisord部署
    关于windows上的账号(权限)切换
    python中的global关键字
    暂时性的小总结
    windwos 安装下kafka的安装使用
  • 原文地址:https://www.cnblogs.com/yuandaozhe/p/11511914.html
Copyright © 2020-2023  润新知