Не все символы ASCII перекодированы в wchar_t с помощью mbstowcs

Я посмотрел на несколько похожих вопросов, но не могу найти решение своей проблемы: я пытаюсь преобразовать символы из ASCII в широкие символы (Windows UTF16), чтобы напечатать их в окне (цель состоит в том, чтобы захватить пользовательские наборы символов для встроенного приложения, включая поддержку некоторых китайских языков)

Когда я использую mbstowcs, я получаю то, что хочу, за исключением двух строк между символами 0x70 и 0x8F (включены), которые, я считаю, должны соответствовать первым значениям многобайтовых символов.

Когда я использую mbstowcs, мой символ 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]++;
            }
        }

0 ответов

Другие вопросы по тегам