在 I/O 中使用 char16_t 和 char32_t

2024-04-23

C++11介绍char16_t and char32_t以便于处理 UTF-16 和 UTF-32 编码的文本字符串。但是<iostream>库仍然只支持实现定义的wchar_t用于多字节 I/O。

为什么有支持char16_t and char32_t没有被添加到<iostream>库来补充wchar_t支持?


在提案中标准库的最小 Unicode 支持(修订版 2) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2207.html据指出,图书馆工作组仅支持字符串和 codecvt 方面的新字符类型。显然,大多数人反对支持 iostream、fstream、codecvt 以外的方面和正则表达式。

根据会议纪要2006年波特兰会议 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2110.html“LWG 致力于全面支持 Unicode,但不打算使用现有图书馆设施的 Unicode 字符变体来复制图书馆。”我还没有找到任何细节,但我猜测委员会认为当前的库接口不适合 Unicode。一个可能的抱怨可能是它在设计时考虑了固定大小的字符,但 Unicode 完全废弃了这一点,因为虽然 Unicode 数据可以使用固定大小的代码点,但它并不将字符限制为单个代码点。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 I/O 中使用 char16_t 和 char32_t 的相关文章

随机推荐