it-swarm.dev

Substituição do cabeçalho <codecvt> obsoleta

Um pouco de primeiro plano: minha tarefa exigia a conversão de arquivo XML UTF-8 em UTF-16 (com cabeçalho adequado, é claro). E, então, procurei maneiras comuns de converter UTF-8 em UTF-16 e descobri que alguém deveria usar modelos de <codecvt>.

Mas agora, quando está obsoleto , pergunto-me qual é a nova maneira comum de fazer a mesma tarefa?

(Não se preocupe em usar o Boost, mas, além disso, prefiro ficar o mais próximo possível da biblioteca padrão.)

48
login_not_failed

std::codecvt modelo de <locale> em si não está obsoleto. Para UTF-8 a UTF-16, ainda existe std::codecvt<char16_t, char, std::mbstate_t> especialização.

No entanto, como std::wstring_convert e std::wbuffer_convert foram descontinuados junto com as facetas de conversão padrão, não há uma maneira fácil de converter seqüências de caracteres usando as facetas.

Portanto, como Bolas já respondeu: implemente você mesmo (ou você pode usar uma biblioteca de terceiros, como sempre) ou continue usando a API descontinuada.

18
eerorika

Não se preocupe com isso.

De acordo com a mesma fonte de informação :

esse componente da biblioteca deve ser retirado do anexo D, ao longo do lado, até que uma substituição adequada seja padronizada .

Portanto, você ainda pode usá-lo até que uma nova versão padronizada e mais segura seja concluída.

23
xmllmx

A nova maneira é ... você mesmo escreve. Ou apenas conte com a funcionalidade descontinuada. Felizmente, o comitê de padrões não irá realmente remover codecvt até que haja uma substituição em funcionamento.

Mas, atualmente, não há um.

4
Nicol Bolas