Python/C APIでよく使うため関数をリサーチしました。2011年のStackOverflow英語版等にいい関数がありましたので拝借します。なおサロゲートペアには対応していません。
サロゲートペア:1つの文字に対して2つの文字コードを使って表される文字。𠀋 𡈽 𡌛 𡑮 𡢽 𠮟 𡚴 𡸴 𣇄 𣗄など。
const wchar_t* GetWC(const char* c) {
const size_t cSize = strlen(c)+1;
wchar_t* wc = new wchar_t[cSize];
mbstowcs (wc, c, cSize);
return wc;
delete [] wc;
}
--------------------------------------------------
// stringへの変換(charは"string.c_str()")
std::string GetStr(const wchar_t* c) {
std::string tmps;
if (c == nullptr)
return tmps;
size_t sz = wcslen(c);
tmps.reserve(sz*2);
const size_t CNT_MAX = 50;
char tmpc[CNT_MAX];
wchar_t tmpw[CNT_MAX];
const wchar_t* p = c;
while (*p) {
wcsncpy(tmpw, p, 1);
tmpw[1] = L'\0';
p += 1;
wcstombs(tmpc, tmpw, CNT_MAX);
tmps += tmpc;
}
return tmps;
}
setlocale(LC_ALL, ""); // GetC関数使用の際に必要
マルチバイト文字対策とは言えワイド文字wchar_tの存在は何ともやっかいです。