• 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 "";
    }
  • 相关阅读:
    智能指针的简单实现
    原型模式
    Linux——模拟实现一个简单的shell(带重定向)
    软件开发的一个案例:学生信息管理系统
    关于正则的一点总结
    STL——模拟实现空间配置器
    LeetCode全文解锁 √
    话说extern和static
    C++有关 const & 内敛 & 友元&静态成员那些事
    C语——宏小结
  • 原文地址:https://www.cnblogs.com/yuandaozhe/p/11511914.html
Copyright © 2020-2023  润新知