Я работаю над интернационализацией ввода для приложения 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 и мне отправляют текущую кодовую страницу в
EX:
MultiByteToWideChar (
CP_ACP,
0,
mbsVal,
-1,
wcsVal,
размер + 1
);
вместо вызовов mbstowcs преобразование завершается успешно.
У меня вопрос: как использовать общий вызов mbstowcs вместо вызова MuliByteToWideChar?