Korrektes Drucken von UTF-8-Zeichen in der Windows-Konsole
Dieser Artikel befasst sich mit den Herausforderungen, die beim Versuch auftreten, UTF-8-Zeichen zu drucken die Windows-Konsole.
Problembeschreibung
Benutzer sind auf Schwierigkeiten gestoßen Anzeige deutscher Zeichen mithilfe eines bestimmten Code-Snippets:
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
Trotz der Einstellung der Ausgabe-Codepage auf UTF-8 werden deutsche Zeichen nicht korrekt gedruckt.
Lösung
Um Unicode-Daten korrekt im zu drucken Für die Windows-Konsole stehen mehrere Methoden zur Verfügung:
Fehlerbehebung
Bei fehlerhafter Ausgabe mit der dritten Methode:
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
Dies liegt daran, dass die Konsolen-API bei Verwendung von CP_UTF8 in separaten Aufrufen übergebene Daten als unzulässige Codierungen interpretiert.
Um dieses Problem zu beheben, sollten Sie die Erstellung in Betracht ziehen eine Streambuf-Unterklasse, die die Konvertierung von Multibyte-Zeichen genau handhabt und den Konvertierungsstatus zwischen Schreibvorgängen beibehält.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3