gpt4 book ai didi

c++ - 从 ASCII 到 Unicode 字符代码的转换 (FreeType2)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:01 25 4
gpt4 key购买 nike

我在我的一个项目中使用 FreeType2。为了呈现一封信,我需要提供一个 Unicode 两字节字符代码。不过,程序读取的字符代码是 ASCII 单字节格式。 128以下的字符码没有问题(字符码相同),但其他128个不匹配。例如:

ASCII 中的“a”是 0x61,Unicode 中的“a”是 0x0061 - 没问题
ASCII 中的“±”是 0xB9,Unicode 中的“±”是 0x0105——完全不同

我试图在那里使用 WinAPI 函数,但我一定是做错了什么。这是一个示例:

unsigned char szTest1[] = "ąółź"; //ASCII format
wchar_t* wszTest2;
int size = MultiByteToWideChar(CP_UTF8, 0, (char*)szTest1, 4, NULL, 0);
printf("size = %d\n", size);
wszTest2 = new wchar_t[size];
MultiByteToWideChar(CP_UTF8, 0, (char*)szTest1, 4, wszTest2, size);
printf("HEX: %x\n", wszTest2[0]);
delete[] wszTest2;

我希望创建一个新的宽字符串,末尾没有 NULL。但是,size 变量始终等于 0。知道我做错了什么吗?或者也许有更简单的方法来解决问题?

最佳答案

MultiByteToWideCharCodePage 参数是错误的。 Utf-8 与 ASCII 不同。您应该使用 CP_ACP,它告诉您当前系统代码页(与 ASCII 不同 - 请参阅 Unicode, UTF, ASCII, ANSI format differences)

大小为零很可能是因为您的测试字符串不是有效的 Utf-8 字符串。

对于几乎所有的 Win32 函数,您都可以在函数获取详细错误代码失败后调用 GetLastError(),因此调用它也会为您提供更多详细信息。

关于c++ - 从 ASCII 到 Unicode 字符代码的转换 (FreeType2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917098/

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