C++11 引入char16_t
并char32_t
促进使用 UTF-16 和 UTF-32 编码的文本字符串。但是该<iostream>
库仍然只支持wchar_t
为多字节 I/O 定义的实现。
为什么支持char16_t
而char32_t
不是添加到<iostream>
库中以补充wchar_t
支持?
在对标准库(修订版 2)的最小 Unicode 支持提案中指出,只有库工作组支持在字符串和编解码器方面支持新的字符类型。显然,大多数人反对支持 iostream、fstream、codecvt 以外的方面和正则表达式。
根据2006 年波特兰会议的记录, “LWG 致力于全面支持 Unicode,但不打算使用现有图书馆设施的 Unicode 字符变体复制图书馆。” 我还没有找到任何细节,但是我猜委员会认为当前的库接口不适合 Unicode。一种可能的抱怨可能是它在设计时考虑了固定大小的字符,但 Unicode 完全过时了,因为虽然 Unicode 数据可以使用固定大小的代码点,但它并不将字符限制为单个代码点。
就个人而言,我认为没有理由不对各种平台上已经提供的最小支持进行标准化(Windows 对 wchar_t 使用 UTF-16,大多数 Unix 平台使用 UTF-32)。更高级的 Unicode 支持将需要新的库设施,但在 iostream 和 facet 中支持 char16_t 和 char32_t 不会妨碍,但会启用基本的 Unicode i/o。