• 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 "";
    }
  • 相关阅读:
    python高级特性和高阶函数
    代理模式及案例
    我的报错错误记录
    摘抄-编码规范
    测试java的Lambda语法
    测试IDEA将新建项目提交到github上
    js处理科学计数法
    测试java操作运算符
    java根据模板生成,导出word和pdf(aspose.words实现word转换pdf)
    sqlserver日期函数
  • 原文地址:https://www.cnblogs.com/yuandaozhe/p/11511914.html
Copyright © 2020-2023  润新知