Freigeben über


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:

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.