Подтвердить что ты не робот

Устаревший заголовок <codecvt>

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

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

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

4b9b3361

Ответ 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

Новый способ - это... вы сами пишете. Или просто полагайтесь на устаревшие функции. Надеюсь, комитет по стандартизации фактически не удалит кодеквт до тех пор, пока не будет функционировать замена.

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