0

我研究了许多类似的问题,但似乎找不到解决问题的方法:我正在尝试将字符从 ASCII 转换为宽字符(Windows UTF16)以在窗口上打印它们(目的是捕获自定义嵌入式应用程序的字符集,包括对部分中文的支持)

当我使用 mbstowcs 时,我最终得到了我想要的东西,除了字符 0x70 和 0x8F(包括)之间的两行,我认为它们必须对应于多字节字符的第一个值。

当我使用 mbstowcs 时,我的 char s[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]++;
            }
        }
4

0 回答 0