Probleme mit der Konsolenanwendung
Die 8-Bit-Konsolenfunktionen verwenden die OEM-Codeseite. Alle anderen Funktionen verwenden standardmäßig die ANSI-Codeseite. Dies bedeutet, dass von den Konsolenfunktionen zurückgegebene Zeichenfolgen möglicherweise nicht ordnungsgemäß von den anderen Funktionen verarbeitet werden und umgekehrt. Wenn FindFirstFileA beispielsweise eine Zeichenfolge zurückgibt, die bestimmte erweiterte ANSI-Zeichen enthält, zeigt WriteConsoleA die Zeichenfolge nicht ordnungsgemäß an.
Die beste langfristige Lösung für eine Konsolenanwendung ist die Verwendung von Unicode. Die Konsole akzeptiert die UTF-16-Codierung für die W-Variante der APIs oder UTF-8-Codierung für die A-Variante der APIs, nachdem SetConsoleCP und SetConsoleOutputCP für 65001
die UTF-8-Codeseite verwendetCP_UTF8
wurden.
Wenn Sie diese Lösung ausführen, sollte eine Konsolenanwendung die SetFileApisToOEM-Funktion verwenden. Diese Funktion ändert relevante Dateifunktionen, sodass sie OEM-Zeichensatzzeichenfolgen anstelle von ANSI-Zeichensatzzeichenfolgen erzeugen.
Im Folgenden sind Dateifunktionen aufgeführt:
CopyFile
CreateDirectory
CreateFile
CreateProcess
DeleteFile
FindFirstFile
FindNextFile
GetCurrentDirectory
GetDiskFreeSpace
GetDriveType
Bei der Verwendung von Befehlszeilen sollte eine Konsolenanwendung die Befehlszeile in Unicode-Formular abrufen und in OEM-Formular konvertieren, wobei die relevanten Zeichen-zu-OEM-Funktionen verwendet werden. Beachten Sie auch, dass die Argv den ANSI-Zeichensatz verwendet.