在I/O中使用char16_t和char32_t

oz1*_*1cz 21 c++ iostream c++11 char16-t char32-t

C++ 11引入char16_tchar32_t便于使用UTF-16和UTF-32编码的文本字符串.但是该<iostream>库仍然只支持wchar_t为多字节I/O 定义的实现.

为什么支持char16_tchar32_t未添加到<iostream>库中以补充wchar_t支持?

bam*_*s53 19

在提案中对标准库(版本2)的最小Unicode支持表明,只有图书馆工作组支持字符串和codecvt方面的新字符类型.显然,大多数人反对支持iostream,fstream,除了codecvt和regex之外的方面.

根据2006年波特兰会议的会议记录, "LWG致力于完全支持Unicode,但不打算用现有图书馆设施的Unicode字符变体复制库." 我还没有找到任何细节,但我想委员会认为当前的库接口不适合Unicode.一个可能的抱怨可能是它的设计考虑了固定大小的字符,但Unicode完全废弃了,因为虽然Unicode数据可以使用固定大小的代码点,但它不会将字符限制为单个代码点.

我个人认为没有理由不标准化已经在各种平台上提供的最小支持(Windows对于wchar_t使用UTF-16,大多数Unix平台使用UTF-32).更高级的Unicode支持将需要新的库设施,但是在iostreams和facets中支持char16_t和char32_t不会妨碍,但会启用基本的Unicode i/o.