使用char16_t和char32_t在I/O
Using char16_t and char32_t in I/O
c++ 11引入char16_t
和char32_t
以方便处理UTF-16和utf -32编码的文本字符串。但是<iostream>
库仍然只支持实现定义的wchar_t
用于多字节I/o。
为什么对char16_t
和char32_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。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 使用CMake创建QML插件
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 使用指针从C++中的数组中获取最大值
- 使用不带参数的函数访问结构元素