переменные — Unicode в C ++ не отображается в Mac Terminal

Terminal > Profiles > Advanced > Text encoding устанавливается как Unicode (UTF-8),

Terminal > Profiles > Advanced > Set locale environment variables on startup проверено.

Terminal > Profiles > Advanced > Unicode East Asian Ambiguous characters are wide проверено (я тоже пробовал не проверять — оба дают одинаковые результаты).

Шрифт, выбранный в профиле терминала, совместим с китайскими иероглифами — я проверил.

Я проверил locale через сам терминал, и он дает следующее:

LANG="en_US.UTF-8"LC_COLLATE="en_US.UTF-8"LC_CTYPE="en_US.UTF-8"LC_MESSAGES="en_US.UTF-8"LC_MONETARY="en_US.UTF-8"LC_NUMERIC="en_US.UTF-8"LC_TIME="en_US.UTF-8"LC_ALL="en_US.UTF-8"

— Я не уверен, что это проблема, как говорится en_US но и говорит UTF8, которая является кодировкой символов, которые я ввожу.

Чтобы проверить все это, я использовал следующий код:

char dao [4] = "\u9053";
std::wcout << "Character: " << dao << std::endl;

wchar_t wdao[] = L"道";
std::wcout << "Character 2: " << wdao << std::endl;

Сначала персонажи появлялись как вопросительные знаки, но теперь они вообще не появляются. Если я добавлю все эти строки в программу, все, что появляется, это Character: — он никогда не попадает на вторую строку, не показывает китайский символ и не выдает ошибку.

я пробовал setlocale(); но это не помогает

Я также убедился, что исходный файл для кода C ++ установлен как Unicode UTF-8,

Есть идеи? Здесь я что-то упускаю?

ОБНОВЛЕНИЕ: я могу получить символы для отображения в терминале с помощью этого метода:

char dao [4] = "道";
std::cout << "Character: " << dao << std::endl;

char dao2 [4] = "\u9053";
std::cout << "Character: " << dao2 << std::endl;

Тем не менее, я никогда не мог заставить его работать с wchar_t вместо char[], Я полагаю, что это достаточно хорошо, поскольку он функционирует, однако, если кто-то знает, что проблема была с использованием wchar_tЯ был бы признателен, если бы знал это для дальнейшего использования.

1

Решение

Здесь нет << оператор, который выводит узкую строку в wostream (например, wcout).

Это то, что вы делаете в первом случае, вы объявляете

char dao [4] = "\u9053";

А затем попробуйте вывести его в std :: wcout

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector