我正在努力实现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;
}
在执行结束时,宽字符串不包含转换的数据。我认为代码页设置有问题,因为当我使用multibytoWideChar并将当前代码页发送到
前任:
多字节towidechar(
CPY-ACP,
0,
姆斯瓦尔
- 1,
韦斯瓦尔
尺寸+ 1
;
代替mbstowcs调用,转换成功。
我的问题是,如何使用通用mbstowcs调用而不是mulibytetowedechar调用?