Ein bisschen im Vordergrund: Meine Aufgabe bestand darin, eine UTF-8-XML-Datei in UTF-16 zu konvertieren (natürlich mit dem richtigen Header). Und so suchte ich nach üblichen Möglichkeiten, UTF-8 in UTF-16 umzuwandeln, und fand heraus, dass man Vorlagen aus <codecvt>
Verwenden sollte.
Aber jetzt, wo es veraltet ist, frage ich mich, was die neue übliche Art ist, die gleiche Aufgabe zu erledigen.
(Es macht mir nichts aus, Boost überhaupt zu verwenden, aber ansonsten möchte ich so nah wie möglich an der Standardbibliothek bleiben.)
std::codecvt
Vorlage von <locale>
selbst ist nicht veraltet. Für UTF-8 bis UTF-16 gibt es noch std::codecvt<char16_t, char, std::mbstate_t>
Spezialisierung.
Seit std::wstring_convert
und std::wbuffer_convert
sind zusammen mit den Standard-Konvertierungsfacetten veraltet. Es gibt keine einfache Möglichkeit, Zeichenfolgen mithilfe der Facetten zu konvertieren.
Also, wie Bolas bereits geantwortet hat: Implementieren Sie es selbst (oder verwenden Sie wie immer eine Drittanbieter-Bibliothek) oder verwenden Sie weiterhin die veraltete API.
Mach dir darüber keine Sorgen.
Nach die gleiche Informationsquelle :
diese Bibliothekskomponente sollte nebenbei in Anhang D eingestellt werden , bis ein geeigneter Ersatz standardisiert ist .
Sie können es also weiterhin verwenden, bis eine neue standardisierte, sicherere Version erstellt wurde.
Der neue Weg ist ... du schreibst es selbst. Oder verlassen Sie sich einfach auf veraltete Funktionen. Hoffentlich wird das Normungskomitee nicht wirklich entfernen codecvt, bis es einen funktionierenden Ersatz gibt.
Aber zur Zeit gibt es keinen.