huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


/////////////////////////////
//
//    EncodingConvert.hpp
//    字符串编码转换
//

#pragma once

#include <codecvt>

namespace EncodingConvert {

    // 转为 UTF-8
    std::string ToUTF8(const std::wstring& str)
    {
        static std::wstring_convert<std::codecvt_utf8<wchar_t> > strCnv;
        return strCnv.to_bytes(str);
    }

    // 转为 ANSI
    std::wstring ToANSI(const std::string& str)
    {
        static std::wstring_convert< std::codecvt_utf8<wchar_t> > strCnv;
        return strCnv.from_bytes(str);
    }

    // 任意编码转换
    // locale = "chs" 或 "zh-cn"
    std::string ToEncoding(const std::wstring& str, const std::string& locale)
    {
        typedef std::codecvt_byname<wchar_t, char, std::mbstate_t> F;
        static std::wstring_convert<F> strCnv(new F(locale));
        return strCnv.to_bytes(str);
    }

    // 任意编码转换
    // locale = "chs" 或 "zh-cn"
    std::wstring ToEncoding(const std::string& str, const std::string& locale)
    {
        typedef std::codecvt_byname<wchar_t, char, std::mbstate_t> F;
        static std::wstring_convert<F> strCnv(new F(locale));
        return strCnv.from_bytes(str);
    }

}


改编自 https://blog.csdn.net/dbx2011/article/details/99735254


注意!如果错误地进行转换可能导致崩溃,比如原本就是 ANSI 编码的字符串转 ANSI,就可能会崩溃。




返回首页


Copyright (C) 2018-2024 huidong