Я нашел эту тему Преобразовать между строкой, u16string & u32string и решение (которое выглядит действительно великолепно) работает только с использованием libc ++, а не libstdc ++. В настоящее время libc ++ не может использоваться — его трудно скомпилировать и он плохо работает в Windows.
Есть ли какой-либо метод для преобразования между этими представлениями с использованием C ++ 11 и libstdc ++, который работает на всех платформах?
Я особенно заинтересован в преобразовании u32_string в строку (utf8) и наоборот.
В C ++ 11 есть способ сделать это с помощью wstring_convert учебный класс.
Тем не менее, кажется, что он еще не реализован libstdc ++ (по состоянию на gcc 4.8)
То же самое относится к:
codecvt<char16_t, char, mbstate_t>.
codecvt<char32_t, char, mbstate_t>.
codecvt_utf8.
codecvt_utf16.
codecvt_utf8_utf16.
На самом деле заголовок <codecvt>
все еще не присутствует в распределении gcc.
Вы можете использовать utf8cpp (http://utfcpp.sourceforge.net/) он предоставляет эти конвертеры как простой в использовании C ++.