Вывод Unicode на консоль Использование C ++ в Windows

Я все еще изучаю C ++, так что несите меня и мой неряшливый код. Компилятор, который я использую, – Dev C ++. Я хочу иметь возможность выводить символы Unicode на консоль с помощью cout. Когда я пробую вещи вроде:

#include  int main() { std::cout << "Hello World!\n"; std::cout << "Blah blah blah some gibberish unicode: ĐĄßĞĝ\n"; system("PAUSE"); return 0; } 

Он выводит странные символы на консоль, например μA ■ Gg. Почему это так, и как я могу показать ĐĄßĞĝ? Или это невозможно в Windows?

4 Solutions collect form web for “Вывод Unicode на консоль Использование C ++ в Windows”

Как насчет std::wcout ?

 #include  int main() { std::wcout < < L"Hello World!" << std::endl; return 0; } 

Это стандартный stream вывода с широкими символами.

Тем не менее, как отметил Адриан, это не касается факта cmd , по умолчанию не обрабатывает Unicode-выходы. Это можно решить, вручную настроив консоль, как описано в ответе Адриана:

  • Запуск cmd с аргументом /u ;
  • Вызов chcp 65001 для изменения формата вывода;
  • И установка шрифта unicode в консоли (например, Lucida Console Unicode).

Вы также можете попробовать использовать _setmode(_fileno(stdout), _O_U16TEXT); , которые требуют fcntl.h и io.h (как описано в этом ответе и задокументировано в этом сообщении в блоге ).

Я не уверен, что Windows XP будет полностью поддерживать то, что вам нужно. Чтобы включить Unicode с командной консолью, вам нужно сделать три действия:

  1. Запустите командное окно с помощью cmd /u . /u говорит, что ваши программы выведут Unicode.
  2. Используйте chcp 65001 чтобы указать, что вы хотите использовать UTF-8 вместо одной из кодовых страниц.
  3. Выберите шрифт с большим количеством глифов. Окна команд в новых версиях Windows предлагают Lucida Console Unicode . В моей коробке XP есть подмножество, называемое Lucida Console . Он не имеет очень обширного репертуара, но его должно быть достаточно, если вы просто пытаетесь отобразить некоторые акцентированные символы.

Вы использовали выходной stream ANSI. Вы должны использовать
std::wcout < < L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";

Кроме того, используйте std :: cin.get (), а не систему («ПАУЗА»)

В Linux я могу наивно делать:

 std::cout < < "ΐ , Α, Β, Γ, Δ, ,Θ , Λ, Ξ, ... ±, ... etc"; 

и он работал для большинства персонажей, которых я пробовал.

  • Мое колесо прокрутки мыши не прокручивается
  • Вирус дублировал учетную запись пользователя на XP?
  • Переключить Ctrl и Alt с помощью AutoHotKey без использования переключателя Alt-Tab?
  • Значки приложений повреждены в проводнике
  • Программа для перепрограммирования моей клавиатуры?
  • Замена ноутбука не увеличивает / уменьшает яркость экрана при смене источника питания
  • Перемещение Windows XP на новый ПК
  • Как я могу принудительно включить или отключить внутренний жесткий диск, когда захочу?
  • В XP, как мне переименовать каталог файлов с помощью регулярного выражения или аналогичный, чтобы удалить часть имени файла и добавить префикс?
  • Лучший способ получить информацию о лицензии
  • Легкий способ загрузки установочного компакт-диска WinXP с USB-накопителя USB?
  • Давайте будем гением компьютера.