Вывод Unicode на консоль Использование С++ в Windows
Я все еще изучаю С++, так что несите меня и мой неряшливый код. Компилятор, который я использую, - Dev С++. Я хочу иметь возможность выводить символы Unicode на консоль с помощью cout. Когда я пытаюсь что-то вроде:
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
std::cout << "Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";
system("PAUSE");
return 0;
}
Он выводит странные символы на консоль, например μA ■ Gg. Почему это так, и как я могу показать ĐĄßĞĝ? Или это невозможно в Windows?
Ответы
Ответ 1
Как насчет std::wcout
?
#include <iostream>
int main() {
std::wcout << L"Hello World!" << std::endl;
return 0;
}
Это стандартный поток вывода широкоформатных символов.
Тем не менее, как отметил Адриан, это не касается факта cmd
, по умолчанию не обрабатывает Unicode-выходы. Это можно решить, вручную настроив консоль, как описано в ответе Адриана:
- Запуск
cmd
с аргументом /u
;
- Вызов
chcp 65001
для изменения формата вывода;
- И установка шрифта юникода в консоли (например, Unicode Lucida Console).
Вы также можете попробовать использовать _setmode(_fileno(stdout), _O_U16TEXT);
, для которого требуются fcntl.h
и io.h
(как описано в этом ответе, и задокументированы в это сообщение в блоге).
Ответ 2
Я не уверен, что Windows XP полностью поддержит то, что вам нужно. Чтобы включить Unicode с консолью, вам нужно сделать три действия:
- Запустите командное окно с помощью
cmd /u
. /u
говорит, что ваши программы выведут Unicode.
- Используйте
chcp 65001
, чтобы указать, что вы хотите использовать UTF-8 вместо одной из кодовых страниц.
- Выберите шрифт с большим количеством глифов. Окна команд в новых версиях Windows предлагают
Lucida Console Unicode
. В моей коробке XP есть подмножество под названием Lucida Console
. Он не имеет очень обширного репертуара, но его должно быть достаточно, если вы просто пытаетесь отобразить некоторые символы с акцентом.
Ответ 3
Вы использовали выходной поток ANSI. Вам нужно использовать std::wcout << L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";
Кроме того, используйте std:: cin.get(), а не систему ( "ПАУЗА" )
Ответ 4
В Linux я могу наивно делать:
std::cout << "ΐ , Α, Β, Γ, Δ, ,Θ , Λ, Ξ, ... ±, ... etc";
и он работал для большинства персонажей, которые я пробовал.