Plattformunabhängige UTF8- und Breitzeichenkonvertierung in STL
Die Konvertierung zwischen UTF8-Zeichenfolgen in std::string und std::wstring ist eine häufige Anforderung bei der Arbeit mit breiten Zeichen. Obwohl es plattformspezifische Funktionen wie MultiByteToWideChar gibt, sind sie nicht für Code geeignet, der auf mehrere Betriebssysteme abzielt.
Lösung für C 11 und höher
In C 11 der Standard Die Bibliothek hat die Unterstützung für die Zeichenkonvertierung über std::codecvt eingeführt. Dies ermöglicht eine plattformunabhängige UTF8-Konvertierung mit dem folgenden Code:
// UTF-8 to UTF-16 std::string utf8Source; std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; std::u16string utf16Dest = convert.from_bytes(utf8Source); // UTF-16 to UTF-8 std::u16string utf16Source; std::string utf8Dest = convert.to_bytes(utf16Source);
Andere Ansätze
Wie in anderen Antworten erwähnt, gibt es alternative Ansätze:
Auswahl des richtigen Ansatzes
Die Wahl der Konvertierungsmethode hängt von den Anforderungen und Abhängigkeiten des Projekts ab. std::codecvt von C 11 wird für Projekte empfohlen, bei denen Einfachheit und Portabilität im Vordergrund stehen. Für komplexe oder plattformspezifische Anforderungen sollten Sie Boost.Locale oder iconv.
in Betracht ziehenDas obige ist der detaillierte Inhalt vonWie führt man eine plattformunabhängige UTF8- und Wide-Character-Konvertierung in C durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!