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