В стандарте C ++ 20 нет ничего, что конвертирует wchar_t
в char32_t
и обратно. В конце концов, wchar_t
- это , который должен быть достаточно большим, чтобы содержать любую поддерживаемую кодовую точку.
И действительно, везде поддерживается Unicode выше U + FFFF, wchar_t
32-битный, кроме Windows (и Java, но это не имеет значения). Так что да, даже сегодня работа с Unicode в портативном режиме проблематична c, и sizeof(wchar_t)==2
или #ifdef _WIN32
оба звучат как законные обходные пути.
Сказав это, wcout
все еще без проблем работает с wchar_t
на всех платформах независимо от базовой кодировки.
Только если вы обрезаете строк или работаете с отдельными кодовыми точками и , вы хотите поддерживать кодовые точки за пределами базовая c плоскость, , затем , вам необходимо принять во внимание суррогатные пары (что довольно просто, 0xD800–0xDBFF = первая пара, 0xDC00–0xDFFF = вторая пара, не вставляйте между ними) .