Использование 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.