Поделиться через


Проблемы с приложением консоли

8-разрядные функции консоли используют кодовую страницу OEM. Все остальные функции используют кодовую страницу ANSI по умолчанию. Это означает, что строки, возвращаемые функциями консоли, могут не обрабатываться правильно другими функциями и наоборот. Например, если FindFirstFileA возвращает строку, содержащую определенные расширенные символы ANSI, WriteConsoleA не будет отображать строку должным образом.

Лучшее долгосрочное решение для консольного приложения — использовать Юникод. Консоль примет кодировку UTF-16 в варианте W API или кодировки UTF-8 в варианте API-интерфейсов A после использования SetConsoleCP и SetConsoleOutputCP 65001 (CP_UTF8константа) для кодовой страницы UTF-8.

За исключением этого решения консольное приложение должно использовать функцию SetFileApisToOEM . Эта функция изменяет соответствующие функции файлов, чтобы они создали строки наборов символов OEM, а не строки набора символов ANSI.

Ниже приведены функции файлов:

При работе с командными строками консольное приложение должно получить командную строку в форме Юникода и преобразовать ее в форму OEM, используя соответствующие функции символов в OEM. Обратите внимание, что argv использует набор символов ANSI.