Проблемы консольных приложений
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. |