„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie drucke ich UTF-8-Zeichen in der Windows-Konsole korrekt mit deutschen Zeichen?

Wie drucke ich UTF-8-Zeichen in der Windows-Konsole korrekt mit deutschen Zeichen?

Veröffentlicht am 09.11.2024
Durchsuche:109

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

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:

  1. WriteConsoleW direkt verwenden: Kommunizieren Sie explizit mit der Konsolen-API über WriteConsoleW. Dieser Ansatz stellt sicher, dass Daten korrekt in die Konsole geschrieben werden. Allerdings muss zwischen Konsolen- und Nicht-Konsolen-Ausgabesituationen unterschieden werden.
  2. Ausgabemodus festlegen: Stellen Sie den Ausgabemodus der Standardausgabedateideskriptoren über _setmode auf „_O_U16TEXT“ oder „_O_U8TEXT“ ein. Dies ermöglicht Breitzeichenausgabefunktionen, um Unicode-Daten korrekt an die Konsole auszugeben. Beachten Sie, dass diese Methode nur die Verwendung von Breitzeichenfunktionen für den ausgewählten Stream erfordert.
  3. CP_UTF8-Kodierung: Drucken Sie UTF-8-Text direkt auf der Konsole, indem Sie die Ausgabecodepage der Konsole auf CP_UTF8 festlegen und entsprechende verwenden Low-Level-Funktionen oder ein benutzerdefinierter Ostream Implementierung.

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.

Neuestes Tutorial Mehr>

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