gpt4 book ai didi

C/C++ I18N mbstowcs 问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:20 25 4
gpt4 key购买 nike

我正在致力于国际化 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 并发送当前代码页时

例如: 多字节到宽字符( CP_ACP, 0, mbs值, -1, wcsVal, 大小 + 1 );代替 mbstowcs 调用,转换成功。

我的问题是,如何使用通用 mbstowcs 调用而不是 Teh MuliByteToWideChar 调用?

最佳答案

如果打印 setlocale() 返回的字符串,您会得到什么?这将指示实际设置的语言环境,这可能不是您所期望的。

MSDN indicates在 Windows 上,为 “” 选择的默认区域设置是 “从操作系统获得的用户默认 ANSI 代码页”。也许这与当前 ANSI 代码页不同?

关于C/C++ I18N mbstowcs 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com