Может ли командная строка отображать символы Юникода? - PullRequest
2 голосов
/ 02 февраля 2011

Например:

cout << "你好" << endl;

Ответы [ 5 ]

3 голосов
/ 02 февраля 2011

Это зависит от платформы и от кодировки командной строки.

Тем не менее, вам может повезти больше с

std::wcout << L"你好" << std::endl;
2 голосов
/ 03 февраля 2011

Поскольку вы говорите о Windows, вы говорите консольные окна .

Окна консоли Windows основаны на Unicode, точнее UCS-2 (базовая многоязычная плоскость, по сути оригинальный 16-битный Unicode).

Вопреки тому, что предлагается в других ответах, вы не можете сделать больше по отношению к. результаты с std::wcout, чем с std::cout. Стандартные широкие выходные потоки просто переводятся в однобайтовую кодировку выполнения программы. Который по умолчанию в Windows является кодировкой символов OEM (которую можно настроить с помощью недокументированного ключа реестра).

Но вы можете вывести Unicode через консольные функции Windows API.

Примечание: Не рекомендуется устанавливать для консольных окон значение UTF-8 . Затем интерпретатор команд [cmd.exe] просто молча игнорирует большинство команд. По крайней мере, в Windows XP и более ранних версиях.

Я только что установил OEM на Windows ANSI Western (через упомянутый недокументированный раздел реестра), и он работает для большинства целей, но, конечно, не на китайском. Это кодовая страница 1252. В качестве альтернативы вы можете сделать это вручную с помощью команды chcp 1252 в каждом экземпляре интерпретатора команд, а также другими способами.

Приветствия & hth.,

1 голос
/ 02 февраля 2011

Консоль Windows поддерживает Unicode, частично.Он не поддерживает, например, языки справа налево.

Ваш пример с cout не выводит юникод.Вместо этого используйте wcout.Или используйте WriteConsoleW

1 голос
/ 02 февраля 2011

Все зависит от используемой консоли / оболочки.

Некоторые оболочки могут быть настроены на использование UTF-8 (я это делал однажды давным-давно), так что это можно сделать, но я забываю детали.

Прежде чем кто-то действительно сможет конкретизировать, нам нужно знать оболочку, которую вы используете, и на какой платформе она запущена (с полной информацией о версиях каждой из них).

1 голос
/ 02 февраля 2011

Зависит от операционной системы и реализации.В настоящее время активный стандарт C ++ даже не говорит о Unicode.

В Windows, я полагаю, вы можете использовать версии с широкими символами.Тогда ваш код должен быть:

std::wcout << L"ni3 hao3" << std::endl;

Однако вам, возможно, придется специально вводить коды символов Unicode, потому что набор кодов, который вы используете для написания исходного кода C ++, может быть не Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...