C ++ UFT-8変換およびGB2312間

この記事では、コードは非常に有用であることが分かっ  https://bbs.csdn.net/topics/391040755

書式#include <codecvt> 
書式#include <ロケール> 
書式#include <ベクトル>
 使用して 名前空間はstdを、
std :: 文字列 gb2312_to_utf8(スタンダード:: 文字列 のconststrGb2312)
{ 
    のstd ::ベクトル <wchar_tの> バフ(strGb2312.size())。
#ifdefの_MSC_VER 
    のstd ::ロケールLOC(" ZH-CN " )。
#else 
    のstd ::ロケールLOC(" zh_CN.GB18030 " );
#endifの
    はwchar_t * pwszNext = nullptr;
    const  のchar * pszNext = nullptr;
    mbstate_t状態 = {};
    INT RES = STD :: use_facet <はstd :: codecvt <wchar_tは、チャー、のmbstate_t>> 
        (LOC)。(状態、
            strGb2312.data()、strGb2312.data() + strGb2312.size()、pszNext、
            buff.data()、buff.data() + pwszNext、buff.size())。

    もし(STD :: codecvt_base :: OK == RES)
    { 
        のstd :: wstring_convert <はstd :: codecvt_utf8 <wchar_t型>> cutf8。
        返すcutf8.to_bytes(STD :: wstringの(buff.data()、pwszNextを)); 
    } 

    リターン 「」

} 

のstd ::ストリング utf8_to_gb2312(スタンダード:: 文字列 のconststrUtf8)
{ 
    のstd :: wstring_convert <はstd :: codecvt_utf8 <wchar_t型>> cutf8。
    std :: wstringのwTemp = cutf8.from_bytes(strUtf8)。
#ifdefの_MSC_VER 
    のstd ::ロケールLOC(" ZH-CN " )。
#else 
    のstd ::ロケールLOC(" zh_CN.GB18030 " );
#endifの
    constのはwchar_t * pwszNext = nullptr;
    char * pszNext = nullptr; 
    mbstate_t状態 = {}; 

    std ::ベクトル <チャー >バフ(wTemp.size()* 2 )。
    INT RES = STD :: use_facet <はstd :: codecvt <wchar_tは、チャー、のmbstate_t>> 
        (LOC)。アウト(状態、
            wTemp.data()、wTemp.data() + wTemp.size()、pwszNext、
            buff.data()、buff.data() + buff.size()、pszNext)。

    もし(STD :: codecvt_base :: OK ==のRES)
    { 
        戻りのstd :: 文字列(buff.data()、pszNext)。
    } 
    リターン 「」
}

 

おすすめ

転載: www.cnblogs.com/yuandaozhe/p/11511914.html