53 votes

En-tête obsolète <codecvt> remplacement

Un peu de premier plan: ma tâche nécessaire conversion UTF-8 fichier XML en UTF-16 (avec en-tête, bien sûr). Et j'ai donc cherché sur les façons habituelles de la conversion UTF-8, UTF-16, et découvert que l'on doit utiliser des modèles de <codecvt>.

Mais maintenant, quand il est obsolète, je me demande quelle est la nouvelle façon de faire la même tâche?

(N'ayez pas l'esprit à l'aide de Boost à tous, mais d'autres que je préfère rester près de la bibliothèque standard que possible.)

24voto

xmllmx Points 5898

Ne t'inquiète pas pour ça.

Selon la même source d'information :

cette composante de bibliothèque doit être retirée de l’Annexe D, avec elle, jusqu’à ce qu’un produit de 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.

18voto

user2079303 Points 4916

std::codecvt template de <locale> lui-même n'est pas obsolète. Pour UTF-8 à UTF-16, il existe toujours une spécialisation std::codecvt<char16_t, char, std::mbstate_t> .

Toutefois, étant donné que 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 à l'aide des 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.

4voto

Nicol Bolas Points 133791

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 n'enlèvera pas le codecvt tant qu'il n'y aura pas de remplaçant fonctionnel.

Mais à l'heure actuelle, il n'y en a pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X