使用char16_t和char32_t在I/O

Using char16_t and char32_t in I/O

本文关键字:char16 使用 char32      更新时间:2023-10-16

c++ 11引入char16_tchar32_t以方便处理UTF-16和utf -32编码的文本字符串。但是<iostream>库仍然只支持实现定义的wchar_t用于多字节I/o。

为什么对char16_tchar32_t的支持没有添加到<iostream>库中以补充wchar_t的支持?

对标准库的最小Unicode支持(修订2)提案中指出,只有库工作组支持字符串和编解码面中的新字符类型。显然,大多数人反对支持iostream、fstream、facet,而不是codecvt和regex。

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

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