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