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

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

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

1 ответ

Решение

В предложении о поддержке минимального Unicode для стандартной библиотеки (редакция 2) указано, что в рабочей группе библиотеки была только поддержка для поддержки новых типов символов в строках и фасетах codecvt. Очевидно, большинство было против поддержки 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.

Другие вопросы по тегам