在c++ 0x中没有Unicode流?为什么
No Unicode Streams in C++0x ? Why?
今天我发现,c++标准委员会在c++ 0x的第二版中取消了对Unicode流的支持。要了解更多信息,请参阅此问题。
根据本文档:
省略这两种新类型的流专门化的理由是,非char类型的流没有得到广泛的使用,因此不清楚是否真的需要将这种非常复杂的机制的专门化数量增加一倍。
摘自对Stroustrup的采访:
显然,我们应该在标准库中提供Unicode流和其他扩展的Unicode支持。委员会知道这一点,但没有人有技能和时间来做这项工作,所以不幸的是,这是你必须寻找"第三方"支持的众多领域之一。
我不是Unicode专家,我想知道为什么实现Unicode流如此困难?它有什么问题?
你引用的第一段告诉你:并不是Unicode流特别比其他流更困难,而是iostreams一般都非常复杂。因此,实现Unicode iostreams的困难并不是因为它们是Unicode,而是因为它们是iostreams。
N2238是2007年的论文,没有相关性。我不确定Stroustrup在采访中具体指的是什么,但这不是什么突发新闻。
N3242§22.5仍然需要codecvt_utf8
和codecvt_utf16
,这是Unicode文件I/O所需的全部。imbue
正确的方面到wcout
,应该很好去…假设你有一个兼容的库。然而,实际上,GCC和MSVC已经提供了UTF-8,我希望每个严肃的c++平台都保持mbstowcs
和codecvt
之间的平价。
可能会有混淆,因为N3242§22.5/5说
-多字节序列只能作为二进制文件写入。试图写入文本文件产生未定义的行为。
这是因为文本模式I/O转换行结尾,所以0x10
字节作为16位UTF-16字的一半可能被转换为0x13, 0x10
,从而破坏流。这与支持差无关,只是要确保以二进制模式打开文件,因为您必须使用任何提供此类功能的库。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- C++ - 为什么 unicode 输出不正确?
- 为什么 unicode 编码需要函数 wsetlocale()
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- 为什么我得到的是数字而不是Unicode字符
- 为什么getline正在读取我的整个unicode文件
- 为什么在C++std::string中对unicode字符一视同仁
- 为什么 printf 不格式化 unicode 参数?
- Unicode字符或多字节字符:哪种类型更有效?为什么
- 为什么这些 Unicode 变量名称不能与 -fextended- 标识符一起使用?"、"和≠
- 为什么PGSQL中不支持Unicode字符θ
- 在c++ 0x中没有Unicode流?为什么