C++-Standardbibliothek <codecvt>

<codecvt>Es ist eine Header-Datei in der C++-Standardbibliothek, die Werkzeuge für die Zeichenkonvertierung bereitstellt. Diese Header-Datei enthält hauptsächlichstd::codecvtKlassenvorlagen und ihre Spezialisierungen, die Konvertierungen zwischen Zeichencodierungen unterstützen, wie z. B. von UTF-8 nach UTF-16 oder von Breitzeichen (wchar_t) zu schmalem Zeichen (char), usw.std::codecvtDie Klasse wird üblicherweise mitstd::wstring_convertKlasse zusammen, um eine Zeichenkodierungsumwandlung zu erreichen.

Syntax

codecvtDie wichtigsten Klassen und Funktionen im Namespace sind wie folgt:

  • codecvt_base: definiert den Zustandstyp und die Fehlerbehandlungsmethoden für die Kodierungsumwandlung.
  • codecvt_byname: eine Template-Klasse, die verwendet wird, um Konverter für bestimmte Kodierungen zu erstellen.
  • codecvt_utf8、codecvt_utf16: Konverterklasse für bestimmte Kodierungen.

Grundlegende Syntax

#include <codecvt>
#include <locale>
#include <string>

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide_string = converter.from_bytes("Hello, World!");
std::string narrow_string = converter.to_bytes(L"你好,世界!");

Beispiel

Beispiel 1: Konvertierung von UTF-8 nach UTF-16

In diesem Beispiel demonstrieren wir, wie mancodecvtum eine UTF-8-kodierte Zeichenkette in eine UTF-16-kodierte breite Zeichenkette umzuwandeln.

Beispiel

#include <iostream>
#include <codecvt>
#include <locale>
#include <string>

int main() {
    // Einen UTF-8-zu-UTF-16-Konverter erstellen
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;

    // Original-UTF-8-String
    std::string narrow_string = "Hallo, Welt!";

    // In UTF-16-Wide-String konvertieren
    std::wstring wide_string = converter.from_bytes(narrow_string);

    // Wide-String ausgeben
    std::wcout << L"Wide-String: " << wide_string << std::endl;

    // Den Wide-String zurück in einen UTF-8-String konvertieren
    std::string converted_string = converter.to_bytes(wide_string);

    // Die konvertierte Zeichenkette ausgeben
    std::cout << "Converted string: " << converted_string << std::endl;

    return 0;
}

Ausgabeergebnis:

Wide string: Hello, World!
Converted string: Hello, World!

Beispiel 2: Kodierungskonvertierung mit codecvt_byname

In diesem Beispiel demonstrieren wir, wie mancodecvt_bynameKlasse, um einen namensbasierten Kodierungskonverter zu erstellen und ihn für die Konvertierung zu verwenden.

Beispiel

#include <iostream>
#include <codecvt>
#include <locale>
#include <string>

int main() {
    // Einen namensbasierten Konverter erstellen; hier steht "zh_CN.UTF-8" für die UTF-8-Kodierung für vereinfachtes Chinesisch
    std::wstring_convert<std::codecvt_byname<wchar_t>> converter("zh_CN.UTF-8");

    // Original-UTF-8-String
    std::string narrow_string = "Hello, world!";

    // In einen Wide-String konvertieren
    std::wstring wide_string = converter.from_bytes(narrow_string);

    // Wide-String ausgeben
    std::wcout << L"Wide-String: " << wide_string << std::endl;

    // Den Wide-String zurück in einen UTF-8-String konvertieren
    std::string converted_string = converter.to_bytes(wide_string);

    // Die konvertierte Zeichenkette ausgeben
    std::cout << "Converted string: " << converted_string << std::endl;

    return 0;
}

Ausgabeergebnis:

Wide string: 你好,世界!
Converted string: 你好,世界!

std::codecvtKlassentemplate-Spezialisierung

std::codecvtEs gibt mehrere Spezialisierungsvarianten für unterschiedliche Zeichenkodierungskonvertierungen:

  • std::codecvt_utf8<wchar_t>: breites Zeichen (wchar_t) und UTF-8.
  • std::codecvt_utf8_utf16<char16_t>: Konvertierung zwischen UTF-8 und UTF-16.
  • std::codecvt_utf8<char32_t>: Konvertierung zwischen UTF-8 und UTF-32.

std::wstring_convertKlassenvorlage

std::wstring_convertDie Klassenvorlage ist eine Hilfsklasse, die verwendet wird, um den Lebenszyklus und die Ausnahmebehandlung der Zeichenkodierungskonvertierung zu verwalten:

  • to_bytes: konvertiert breite Zeichen oder Zeichenfolgen in anderen Kodierungen in schmale Zeichen (Byte-Sequenzen).
  • from_bytes: konvertiert schmale Zeichen (Byte-Sequenzen) in breite Zeichen oder Zeichenfolgen in anderen Kodierungen.

Hinweise

  • Im C++17-Standardstd::codecvtwurde als veraltet markiert, und es wird empfohlen, in Zukunft alternative Lösungen (wie die ICU-Bibliothek) für die Zeichenkodierungskonvertierung zu verwenden.
  • Für plattformübergreifende Anwendungen sollte bei der Behandlung der Zeichenkodierung besondere Sorgfalt aufgewendet werden, um ein konsistentes Verhalten auf allen Plattformen zu gewährleisten.

Zusammenfassung

<codecvt>Es bietet eine leistungsstarke Sammlung von Werkzeugen für die Konvertierung zwischen verschiedenen Zeichenkodierungen, insbesondere zwischen UTF-8, UTF-16 und breiten Zeichen. Obwohl in C++17 als veraltet markiert, bleibt es ein nützliches Werkzeug bei der Handhabung der Zeichenkodierungskonvertierung. Das Verständnis und die Beherrschung der Verwendung dieser Werkzeuge können Ihnen helfen, flexiblere und internationalisierte Anwendungen zu schreiben. Wenn Sie spezifische Nutzungsanforderungen oder Fragen haben, können Sie diese weiter diskutieren.

Weitere Erweiterungen