私はC/C++アプリケーションの入力の国際化に取り組んでいます。現在、マルチバイト文字列からワイド文字列への変換で問題が発生しています。
コードはクロスプラットフォーム互換である必要があるため、可能な限りmbstowcsとwcstombsを使用しています。
私は現在WIN32マシンで作業しており、ロケールを英語以外のロケール(日本語)に設定しました。
マルチバイト文字列を変換しようとすると、変換の問題が発生しているようです。
コードの例を次に示します。
int main(int argc, char** argv)
{
wchar_t *wcsVal = NULL;
char *mbsVal = NULL;
/* Get the current code page, in my case 932, runs only on windows */
TCHAR szCodePage[10];
int cch= GetLocaleInfo(
GetSystemDefaultLCID(),
LOCALE_IDEFAULTANSICODEPAGE,
szCodePage,
sizeof(szCodePage));
/* verify locale is set */
if (setlocale(LC_CTYPE, "") == 0)
{
fprintf(stderr, "Failed to set locale\n");
return 1;
}
mbsVal = argv[1];
/* validate multibyte string and convert to wide character */
int size = mbstowcs(NULL, mbsVal, 0);
if (size == -1)
{
printf("Invalid multibyte\n");
return 1;
}
wcsVal = (wchar_t*) malloc(sizeof(wchar_t) * (size + 1));
if (wcsVal == NULL)
{
printf("memory issue \n");
return 1;
}
mbstowcs(wcsVal, szVal, size + 1);
wprintf(L"%ls \n", wcsVal);
return 0;
}
実行の最後に、ワイド文字列には変換されたデータが含まれていません。MultiByteToWideCharを使用して現在のコードページを送信すると、コードページの設定に問題があると思います。
例:MultiByteToWideChar(CP_ACP、0、mbsVal、-1、wcsVal、size + 1); mbstowcs呼び出しの代わりに、変換は成功します。
私の質問は、MuliByteToWideChar呼び出しの代わりに一般的なmbstowcs呼び出しをどのように使用するかです。