Heim > Backend-Entwicklung > C++ > 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?

Patricia Arquette
Freigeben: 2024-10-26 17:15:02
Original
1087 Leute haben es durchsucht

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 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>
Nach dem Login kopieren

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:

  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. Es muss jedoch 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 eine benutzerdefinierte ostream-Implementierung.

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage