Устаревший заголовок <codecvt>
Немного переднего плана: моя задача потребовала конвертировать XML файл UTF-8 в UTF-16 (с правильным заголовком, конечно). И поэтому я обыскал обычные способы конвертации UTF-8 в UTF-16 и выяснил, что нужно использовать шаблоны из <codecvt>
.
Но теперь, когда он устарел, мне интересно, какой новый общий способ выполнить ту же задачу?
(Не против использования Boost вообще, но кроме этого я предпочитаю оставаться как можно ближе к стандартной библиотеке.)
Ответы
Ответ 1
std::codecvt
шаблон из <locale>
сам по себе не устарел. Для UTF-8 до UTF-16 существует еще std::codecvt<char16_t, char, std::mbstate_t>
специализация.
Однако, поскольку std::wstring_convert
и std::wbuffer_convert
устарели вместе со стандартными графами преобразования, нет простого способа преобразования строк с использованием граней.
Итак, как уже сказал Болас: выполните его самостоятельно (или, как всегда, вы можете использовать стороннюю библиотеку) или продолжать использовать устаревший API.
Ответ 2
Не беспокойтесь об этом.
Согласно тот же источник информации:
этот компонент библиотеки должен быть удален в приложение D вместе с ним, , пока стандартная стандартная замена не будет.
Таким образом, вы все равно можете использовать его, используя новую стандартизованную, более безопасную версию.
Ответ 3
Новый способ - это... вы сами пишете. Или просто полагайтесь на устаревшие функции. Надеюсь, комитет по стандартизации фактически не удалит кодеквт до тех пор, пока не будет функционировать замена.
Но в настоящее время его нет.