Korrektes Drucken von UTF-8-Zeichen in der Windows-Konsole
Dieser Artikel befasst sich mit den Herausforderungen, die beim Drucken von UTF-8-Zeichen auftreten die Windows-Konsole.
Problembeschreibung
Benutzer sind auf Schwierigkeiten bei der Anzeige deutscher Zeichen mit einem bestimmten Code-Snippet gestoßen:
<code class="c++">#include <stdio.h> #include <windows.h> 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); }</code>
Trotz Einstellung des Codepage in UTF-8 ausgeben, deutsche Zeichen werden nicht korrekt gedruckt.
Lösung
Um Unicode-Daten korrekt in der Windows-Konsole zu drucken, stehen mehrere Methoden zur Verfügung:
Fehlerbehebung
Bei fehlerhafter Ausgabe mit der dritten Methode:
<code class="c++">putc('2'); putc('0'); // doesn't work with CP_UTF8 puts("20"); // correctly writes UTF-8 data to Windows console with CP_UTF8 </code>
Dies liegt daran, dass die Konsolen-API bei der Verwendung von CP_UTF8 in separaten Aufrufen übergebene Daten als unzulässige Codierungen interpretiert.
Um dieses Problem zu beheben, sollten Sie die Erstellung einer Streambuf-Unterklasse in Betracht ziehen, die die Multibyte-Zeichenkonvertierung genau handhabt und den Konvertierungsstatus zwischen Schreibvorgängen beibehält.
Das obige ist der detaillierte Inhalt vonWie drucke ich UTF-8-Zeichen in der Windows-Konsole korrekt mit deutschen Zeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!