wake-up-neo.com

Ersetzung des veralteten Headers <codecvt>

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.)

48

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.

18
eerorika

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.

23
xmllmx

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.

4
Nicol Bolas