Преобразование между std :: u8string и std :: string - PullRequest
9 голосов
/ 07 апреля 2019

C ++ 20 добавлено char8_t и std::u8string для UTF-8.Тем не менее, нет версии UTF-8 std::cout, и API-интерфейсы ОС в основном ожидают char и набор символов выполнения.Таким образом, нам все еще нужен способ преобразования между UTF-8 и набором исполняемых символов.

Я перечитал char8_t paper , и похоже, что это единственный способ конвертировать между UTF-8 и ECSиспользовать функции std::c8rtomb и std::mbrtoc8.Однако их API крайне запутан.Может кто-нибудь предоставить пример кода?

1 Ответ

0 голосов
/ 12 июня 2019

В настоящее время std::c8rtomb и std::mbrtoc8 являются единственными интерфейсами, предоставляемыми стандартом, которые обеспечивают преобразование между кодировкой выполнения и UTF-8. Интерфейсы неудобны. Они были разработаны, чтобы соответствовать уже существующим интерфейсам, таким как std::c16rtomb и std::mbrtoc16. Формулировка, добавленная к стандарту C ++ для этих новых интерфейсов, намеренно совпадает с формулировкой в ​​стандарте C для ранее существующих связанных функций (надеюсь, что эти новые функции в конечном итоге будут добавлены в C; мне все еще нужно это продолжить). Намерение сопоставить стандартную формулировку C, как бы странно это ни было, - обеспечить, чтобы любой, кто знаком с формулировкой C, признал, что интерфейсы char8_t работают одинаково.

cppreference.com имеет несколько примеров версий этих функций в UTF-16, которые должны быть полезны для понимания вариантов char8_t.

...