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
Я был бы признателен, если бы знал это для дальнейшего использования.
Здесь нет << оператор, который выводит узкую строку в wostream (например, wcout).
Это то, что вы делаете в первом случае, вы объявляете
char dao [4] = "\u9053";
А затем попробуйте вывести его в std :: wcout
Других решений пока нет …