Вывод 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"; 

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

  • Могу ли я загружать и запускать Windows XP с флеш-накопителя USB?
  • Можем ли мы редактировать свойства BIOS на рабочем столе?
  • Серийные порты COM3-COM49 используются, но не указаны в диспетчере устройств
  • Есть ли способ обеспечить, чтобы конкретный USB-ключ всегда получал одну и ту же букву диска?
  • Можно ли установить японский язык IME в Windows XP без компакт-диска?
  • В XP, как мне переименовать каталог файлов с помощью регулярного выражения или аналогичный, чтобы удалить часть имени файла и добавить префикс?
  • Не удается скопировать файл с зеленым именем файла, доступ запрещен
  • Компьютер WinXP зависает при загрузке, а затем циклически переходит на экран «F1, F2»
  • Как установить режим совместимости для исполняемого файла из командной строки?
  • Ищете новый бесплатный брандмауэр (у Sunbelt есть огромная дыра)
  • Windows XP теряет букву диска для существующего раздела на диске
  • Interesting Posts
    Давайте будем гением компьютера.