Проблемы консольных приложений
8-разрядные консольные функции используют кодовую страницу OEM. Все другие функции используют по умолчанию кодовую страницу ANSI. Это означает что, строки, возвращенные консольными функциями не могут быть обработаны правильно другими функциями и наоборот. Например, если FindFirstFileA возвращает строку, которая содержит некоторые расширенные символы ANSI, WriteConsole A не будет показывать на экране строку должным образом.
Самое лучшее долгосрочное решение проблемы для консольной программы состоит в том, чтобы использовать Уникод. Исключая это решение проблемы, консольная программа должна использовать функцию SetFileApisToOEM. Эта функция изменяет относящиеся к процессу функции файла так, чтобы они произвели OEM строки набора символов, а не строки набора символов ANSI.
Это следующие функции файла:
CopyFile | GetFileAttributes | LoadLibrary |
CreateDirectory | GetFullPathName | LoadLibraryEx |
CreateFile | GetModuleFileName | MoveFile |
CreateProcess | GetModuleHandle | MoveFileEx |
DeleteFile | GetSystemDirectory | OpenFile |
FindFirstFile | GetTempFileName | RemoveDirectory |
FindNextFile | GetTempPath | SearchPath |
GetCurrentDirectory | GetVolumeInformation | SetCurrentDirectory |
GetDiskFreeSpace | GetWindowsDirectory | SetFileAttributes |
GetDriveType | _lopen |
Когда занимаешься с командными строками, консольная программа должна получить командную строку в форме Unicode и конвертировать ее в форму OEM, используя необходимые символьные функции для OEM.
Обратите внимание!, также, что argv использует набор символов ANSI. |