この記事では、コードは非常に有用であることが分かっ https://bbs.csdn.net/topics/391040755
書式#include <codecvt> 書式#include <ロケール> 書式#include <ベクトル> 使用して 名前空間はstdを、 std :: 文字列 gb2312_to_utf8(スタンダード:: 文字列 のconst&strGb2312) { の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(スタンダード:: 文字列 のconst&strUtf8) { の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)。 } リターン 「」。 }