2013-03-03 3 views
1

Я писал новое приложение командной строки в C++. Одна из поддерживаемых нами платформ - это, конечно, Windows.Имеет смысл использовать wchar_t/wmain в консольном приложении windows C++?

Консоль Windows по умолчанию использует страницы OEM-кода в зависимости от локали (например, на моей машине это CP437/DOS.Western). Я думаю, если бы это была кириллическая версия Windows, это был бы CP866 и так далее. Эти кодовые страницы OEM содержат только 256 символов)

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

  1. В таком случае, имеет ли смысл использовать wmain/wchar_t и широкие типы символов в моем приложении?
  2. Есть ли преимущества использования широких типов? Или есть серьезная проблема, если используется только char *?
  3. Когда используются широкие типы символов, что такое кодировка аргументов командной строки и строк среды - (wchar_t * argv [] и wchar_t * envp []), я имею в виду. Преобразуются ли они в UTF-16 с помощью Windows CRT или они не тронуты?

Спасибо за ваши вклады.

ответ

1

Вы, кажется, считаете, что Windows внутренне работает в указанной кодовой странице. Это не правда. Windows внутренне работает в Unicode (UTF-16). Для устаревшего программного обеспечения, которое использует char вместо wchar_t, ввод и вывод преобразуются в указанную кодовую страницу.

Я думаю, что это означает, консоль Windows, переводит входные ключевые штрихи в символы, основанные на кодовой страницы по умолчанию

Это не является правильным. Отображение ключевых штрихов на символы (Unicode) определяется раскладкой клавиатуры. Это абсолютно не зависит от кодовой страницы. Например, вы можете использовать китайскую раскладку клавиатуры в системе, используя страницу кодов кириллицы.

  1. не только делает его полностью смысл использовать wchar_t, это рекомендуется путь.
  2. Да, есть преимущество: ваша программа может обрабатывать все символы, поддерживаемые Windows. Если вы используете char, вы не можете обрабатывать символы, которые не находятся на текущей кодовой странице.
  3. Они не преобразованы - они остаются такими, какие они есть, а именно символы UTF-16.

К сожалению, сама команда представляет собой приложение «ANSI», поэтому оно имеет все ограничения «ANSI», и это влияет на ваше приложение, если вы используете его из командной строки. Однако консольное приложение может использоваться другими способами без окна командной строки, а затем оно может полностью поддерживать Unicode.

+0

@oofe, спасибо за ваши ответы. Тем не менее, пока еще не ясно. 1. Командная строка Windows имеет кодовую страницу по умолчанию. Текущую активную кодовую страницу можно получить, выполнив команду chcp; и может быть изменено с использованием той же команды. Он не имеет отношения к раскладке клавиатуры, используемой в настоящее время, согласно вашему комментарию. Тогда, каково значение этого?Не уверен, что такое поведение в кросс-сценарии: китайский макет kb и страница кириллического кода. –

+0

2. Для приложения с включенным юникодом при вызове из командной строки с аргументами аргументы командной строки преобразуются в UTF-16 с помощью Windows CRT и передаются в wmain() как wchar_t * argv []. Это правильно? Это я имел в виду в моем вопросе 3 выше. –

 Смежные вопросы

  • Нет связанных вопросов^_^