Проблемы с приложением консоли
8-разрядные функции консоли используют кодовую страницу OEM. Все остальные функции используют кодовую страницу ANSI по умолчанию. Это означает, что строки, возвращаемые функциями консоли, могут не обрабатываться правильно другими функциями и наоборот. Например, если FindFirstFileA возвращает строку, содержащую определенные расширенные символы ANSI, WriteConsoleA не будет отображать строку должным образом.
Лучшее долгосрочное решение для консольного приложения — использовать Юникод. Консоль примет кодировку UTF-16 в варианте W API или кодировки UTF-8 в варианте API-интерфейсов A после использования SetConsoleCP и SetConsoleOutputCP 65001
(CP_UTF8
константа) для кодовой страницы UTF-8.
За исключением этого решения консольное приложение должно использовать функцию SetFileApisToOEM . Эта функция изменяет соответствующие функции файлов, чтобы они создали строки наборов символов OEM, а не строки набора символов ANSI.
Ниже приведены функции файлов:
CopyFile
CreateDirectory
CreateFile
Createprocess
DeleteFile
FindFirstFile
FindNextFile
GetCurrentDirectory
GetDiskFreeSpace
GetDriveType
При работе с командными строками консольное приложение должно получить командную строку в форме Юникода и преобразовать ее в форму OEM, используя соответствующие функции символов в OEM. Обратите внимание, что argv использует набор символов ANSI.