Udostępnij przez


Problemy z aplikacją konsolową

Funkcje konsoli 8-bitowej używają strony kodowej OEM. Wszystkie inne funkcje domyślnie używają strony kodowej ANSI. Oznacza to, że ciągi zwracane przez funkcje konsoli mogą nie być prawidłowo przetwarzane przez inne funkcje i odwrotnie. Jeśli na przykład funkcja FindFirstFileA zwróci ciąg zawierający pewne rozszerzone znaki ANSI, funkcja WriteConsoleA nie wyświetli poprawnie ciągu.

Najlepszym długoterminowym rozwiązaniem dla aplikacji konsolowej jest użycie formatu Unicode. Konsola będzie akceptować kodowanie UTF-16 w wariantie W interfejsów API lub kodowania UTF-8 w wariantie interfejsów API po użyciu polecenia SetConsoleCP i SetConsoleOutputCP do 65001 (CP_UTF8 stała) dla strony kodowej UTF-8.

Jeśli to rozwiązanie zostanie wykluczona, aplikacja konsolowa powinna używać funkcji SetFileApisToOEM . Ta funkcja zmienia odpowiednie funkcje plików, tak aby tworzyły ciągi zestawu znaków OEM, a nie ciągi zestawu znaków ANSI.

Poniżej przedstawiono funkcje plików:

Podczas pracy z wierszami poleceń aplikacja konsolowa powinna uzyskać wiersz polecenia w formularzu Unicode i przekonwertować go na formularz OEM przy użyciu odpowiednich funkcji znak-OEM. Należy również pamiętać, że argv używa zestawu znaków ANSI.