我调查了一些类似的问题,但我似乎无法找到解决问题的方法: 我试图将字符从ASCII转换为宽字符(Windows UTF16)以在窗口上打印它们(目的是捕获嵌入式应用程序的自定义字符集,包括对某些中文的支持)
当我使用mbstowcs时,我最终得到了我想要的东西,除了字符0x70和0x8F(包括)之间的两行,我认为它必须对应于多字节字符的第一个值。
当我使用mbstowcs时,我的char [5]被解释为UTF-8,它不会将某些值识别为第一个字符 - 我期待一些但不是那么多,我需要一些字符,如单引号和双引号。 .. 如何在不更改整个项目的情况下强制将其理解为纯ASCII?
我也试过MultiByteToWideChar(CP_ACP,0,s,-1,ws,0);但随后我到处都是同一个汉字,这对我没什么帮助......
请注意,这是测试代码。
char s[5] = {0, 0, 0}; // I should really need only [2]
WCHAR ws[5];
SetTextAlign(hdc,TA_CENTER | TA_BASELINE);
for (int y = 0; y < 16 * 64; y += 64)
{
for (int x = 0; x < 16 * 64; x += 64)
{
mbstowcs(ws, s, 1);
// Missing two lines of characters in the middle
TextOutW (hdc, x+32, y+32, ws, 1);
// TextOutA (hdc, x+32, y+32, s, 1);
// Works fine but I need to handle multibyte characters
s[0]++;
}
}