Устаревший заголовок & lt; codecvt & gt; замена

Немного на переднем плане: моя задача требовала преобразования XML-файла UTF-8 в UTF-16 (с правильным заголовком, конечно). И поэтому я искал обычные способы конвертации UTF-8 в UTF-16 и обнаружил, что нужно использовать шаблоны из <codecvt>,

Но теперь, когда это осуждается, Интересно, каков новый общий способ сделать ту же задачу?

(Не возражаю против использования Boost, но в остальном я предпочитаю оставаться как можно ближе к стандартной библиотеке.)

37

Решение

std::codecvt шаблон из <locale> само по себе не считается устаревшим. Для UTF-8 до UTF-16 еще есть std::codecvt<char16_t, char, std::mbstate_t> специализация.

Тем не менее, так как std::wstring_convert а также std::wbuffer_convert устарели вместе со стандартными фасетами преобразования, нет простого способа конвертировать строки с использованием фасетов.

Итак, как уже ответил Болас: внедрите его самостоятельно (или вы можете использовать стороннюю библиотеку, как всегда) или продолжайте использовать устаревший API.

14

Другие решения

Не беспокойся об этом.

В соответствии с тот же источник информации:

этот библиотечный компонент следует перенести в приложение D вместе с
пока подходящая замена не будет стандартизирована.

Таким образом, вы все еще можете использовать его, пока не будет выпущена новая стандартизированная, более безопасная версия.

21

Новый способ … ты пишешь это сам. Или просто полагаться на устаревшую функциональность. Надеюсь, комитет по стандартам не будет на самом деле Удалить codecvt, пока не будет функционирующей замены.

Но в настоящее время его нет.

4
По вопросам рекламы [email protected]