Подтвердить что ты не робот

Использование char16_t и char32_t в I/O

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

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

4b9b3361

Ответ 1

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

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

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