23

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

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

4

1 回答 1

21

在对标准库(修订版 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。

于 2011-11-17T16:20:52.153 回答