Как напечатать 2-байтовые символы Unicode - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь напечатать этот вектор, который также содержит символы Юникода:

unsigned short RussianStr[] = { 0x044D, 0x044E, 0x044F, 0x0000};

По этой причине я не могу использовать вектор char, но без знака short. Как мне распечатать все векторные символы? С помощью функции printf () я вижу только первый напечатанный символ

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Существуют специализированные функции и типы для работы с Широкие символы :

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void) 
{
    wchar_t RussianStr[] = {0x044D, 0x044E, 0x044F, 0x0000};

    setlocale(LC_ALL, "");
    wprintf(L"%ls\n", RussianStr);
    return 0;
}
0 голосов
/ 03 июля 2019

Проблема не в том, как печатать значения utf-16 ... а в том, что ваш терминал вообще будет печатать utf.

Если ваш терминал поддерживает utf, то вам нужно только использовать wchar_t альтернативы семейству функций printf ... и вместо char используйте символы wchar_t.Поскольку терминалы обычно ориентированы на байты, преобразование из utf-16 в utf-8 будет выполнено с помощью функций локали, и будет выведено utf-8 символов.

См. wprintf(3) и многие другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...