Использование char16_t и char32_t в I / O - PullRequest
21 голосов
/ 17 ноября 2011

C ++ 11 представляет char16_t и char32_t для облегчения работы с текстовыми строками в кодировке UTF-16- и UTF-32. Но библиотека <iostream> все еще поддерживает только определенную реализацией wchar_t для многобайтового ввода-вывода.

Почему поддержка char16_t и char32_t не была добавлена ​​в библиотеку <iostream> в дополнение к поддержке wchar_t?

1 Ответ

19 голосов
/ 17 ноября 2011

В предложении Минимальная поддержка Юникода для стандартной библиотеки (редакция 2) указано, что в Рабочей группе по библиотеке поддерживается только поддержка новых типов символов в строкахи кодировать аспекты.Очевидно, большинство было против поддержки iostream, fstream, аспектов, отличных от codecvt и regex.

В соответствии с протоколом заседания в Портленде в 2006 году"LWG стремится к полной поддержке Unicode, но не намерен дублировать библиотеку с символьными вариантами Unicode существующих возможностей библиотеки. "Я не нашел каких-либо подробностей, однако я предполагаю, что комитет считает, что текущий интерфейс библиотеки не подходит для Unicode.Одной из возможных претензий может быть то, что он был разработан с учетом символов фиксированного размера, но Unicode полностью устарел, поскольку, хотя данные Unicode могут использовать кодовые точки фиксированного размера, он не ограничивает символы отдельными кодовыми точками.

ЛичноЯ думаю, что нет причин не стандартизировать минимальную поддержку, которая уже предоставляется на различных платформах (Windows использует UTF-16 для wchar_t, большинство платформ Unix используют UTF-32).Более продвинутая поддержка Unicode потребует новых библиотечных средств, но поддержка char16_t и char32_t в iostreams и фасетах не помешает, но включит базовый ввод / вывод Unicode.

...