Я писал новое приложение командной строки в C++. Одна из поддерживаемых нами платформ - это, конечно, Windows.Имеет смысл использовать wchar_t/wmain в консольном приложении windows C++?
Консоль Windows по умолчанию использует страницы OEM-кода в зависимости от локали (например, на моей машине это CP437/DOS.Western). Я думаю, если бы это была кириллическая версия Windows, это был бы CP866 и так далее. Эти кодовые страницы OEM содержат только 256 символов)
Я думаю, что это означает, что консоль Windows переводит штрихи ввода ввода в символы на основе кодовой страницы по умолчанию. (И, в зависимости от выбранных в настоящее время шрифтов, если есть соответствующий глиф, он отображается).
- В таком случае, имеет ли смысл использовать wmain/wchar_t и широкие типы символов в моем приложении?
- Есть ли преимущества использования широких типов? Или есть серьезная проблема, если используется только char *?
- Когда используются широкие типы символов, что такое кодировка аргументов командной строки и строк среды - (wchar_t * argv [] и wchar_t * envp []), я имею в виду. Преобразуются ли они в UTF-16 с помощью Windows CRT или они не тронуты?
Спасибо за ваши вклады.
@oofe, спасибо за ваши ответы. Тем не менее, пока еще не ясно. 1. Командная строка Windows имеет кодовую страницу по умолчанию. Текущую активную кодовую страницу можно получить, выполнив команду chcp; и может быть изменено с использованием той же команды. Он не имеет отношения к раскладке клавиатуры, используемой в настоящее время, согласно вашему комментарию. Тогда, каково значение этого?Не уверен, что такое поведение в кросс-сценарии: китайский макет kb и страница кириллического кода. –
2. Для приложения с включенным юникодом при вызове из командной строки с аргументами аргументы командной строки преобразуются в UTF-16 с помощью Windows CRT и передаются в wmain() как wchar_t * argv []. Это правильно? Это я имел в виду в моем вопросе 3 выше. –