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 <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 <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-Standard
std::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.