Un peu au premier plan: ma tâche a nécessité la conversion du fichier XML UTF-8 en UTF-16 (avec un en-tête approprié, bien sûr). Et j’ai donc cherché les moyens habituels de convertir UTF-8 en UTF-16, et j’ai découvert qu’il fallait utiliser des modèles de <codecvt>
.
Mais maintenant, quand il est obsolète , je me demande quelle est la nouvelle façon courante de faire la même chose?
(Cela ne vous dérange pas d'utiliser Boost, mais à part cela, je préfère rester aussi proche que possible de la bibliothèque standard.)
std::codecvt
modèle de <locale>
lui-même n'est pas obsolète. Pour UTF-8 à UTF-16, il y a toujours std::codecvt<char16_t, char, std::mbstate_t>
spécialisation.
Cependant, depuis std::wstring_convert
et std::wbuffer_convert
sont obsolètes avec les facettes de conversion standard, il n’existe pas de moyen facile de convertir des chaînes en utilisant les facettes.
Ainsi, comme Bolas l'a déjà répondu: implémentez-le vous-même (ou vous pouvez utiliser une bibliothèque tierce, comme toujours) ou continuez à utiliser l'API obsolète.
Ne vous inquiétez pas pour ça.
Selon même source d'information :
cette composante de bibliothèque doit être retirée de l’Annexe D, aux côtés de jusqu’à ce qu’un remplacement approprié soit normalisé .
Vous pouvez donc toujours l'utiliser jusqu'à ce qu'une nouvelle version normalisée et plus sécurisée soit créée.
La nouvelle façon est ... vous l'écrivez vous-même. Ou tout simplement compter sur des fonctionnalités obsolètes. Espérons que le comité de normalisation ne va pas réellement enlever codecvt tant qu'il n'y aura pas de remplaçant fonctionnel.
Mais à l'heure actuelle, il n'y en a pas.