Мне нужно преобразовать между UTF-8, UTF-16 и UTF-32 для разных API/модулей, и, поскольку я знаю, есть возможность использовать C++ 11 am, глядя на новые типы строк.std :: преобразование u32string в/из std :: string и std :: u16string
Похоже, что я могу использовать string
, u16string
и u32string
для UTF-8, UTF-16 и UTF-32. Я также нашел codecvt_utf8
и codecvt_utf16
, которые выглядят, чтобы быть в состоянии выполнить преобразование между char
или char16_t
и char32_t
и то, что выглядит как более высокий уровень wstring_convert
но только, кажется, работает с байтами/std::string
и не очень много документации.
Я хотел бы использовать wstring_convert
как-то для UTF-16 ↔ UTF-32 и UTF-8 ↔ UTF-32? Я действительно нашел примеры для UTF-8 для UTF-16, что я даже не уверен, что будет правильно в Linux, где wchar_t
обычно считается UTF-32 ... Или сделать что-то более сложное с этими вещами codecvt напрямую?
Или это просто все еще не в состоянии использования, и я должен придерживаться своих существующих небольших подпрограмм с использованием 8, 16 и 32-битных целых чисел без знака?
'wchar_t' не "рассматривается для UTF-32". 'wchar_t' используется для широких символов. Вы можете конвертировать широкие символы в UTF-foo, если хотите. –
Я бы не стал делать ставку на любую функцию unicode на C++ - вы можете попробовать что-то вроде uconv: https://en.wikipedia.org/wiki/Uconv –
, поэтому вы хотите использовать типы u16 * u32 *, я упомянул только wchar_t, потому что примеры google выглядят использовать его, и потому что wstring_convert является стандартным, но u16string_convert, u32string_convert и т. д., похоже, не существует, значит, это означает, что я пропустил что-то о wstring_convert? –