并非所有ASCII字符都由mbstowcs转码为wchar_t

时间:2015-08-13 18:45:46

标签: visual-c++ ascii multibyte-functions

我调查了一些类似的问题,但我似乎无法找到解决问题的方法: 我试图将字符从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]++;
            }
        }

0 个答案:

没有答案