C ++ 0x中没有Unicode流吗?为什么?

时间:2011-04-14 17:05:57

标签: c++ unicode stream io c++11

今天我发现,C ++标准委员会已经在第二版中驳回了C ++ 0x中的Unicode流支持。有关详情,请参阅this问题。

根据this文件:

  

忽略两种新类型的流特化的基本原理是非char类型的流没有被广泛使用,因此不清楚是否真的需要将这种非常复杂的特化数量加倍机械。

来自this采访Stroustrup:

  

显然,我们应该在标准库中拥有Unicode流和其他大量扩展的Unicode支持。委员会知道但没有任何人有技能和时间来完成这项工作,所以不幸的是,这是你必须寻找“第三方”支持的众多领域之一。

我不是Unicode的专家,我想知道为什么实现Unicode流是如此困难?有什么问题呢?

2 个答案:

答案 0 :(得分:5)

你引用的第一段告诉你:并非特别是Unicode流比其他流更困难,因为iostream通常非常复杂。因此,实现Unicode iostream很难,因为它们是Unicode,但因为它们是iostream

答案 1 :(得分:3)

论文N2238是从2007年开始的,没有任何相关性。我不确定Stroustrup在采访中特指的是什么,但这不是突发新闻。

N3242§22.5仍然需要codecvt_utf8codecvt_utf16,这些都是Unicode文件I / O所需要的。 imbue wcout正确的方面mbstowcs应该是好的...假设你有一个兼容的库。但是,在实践中,GCC和MSVC已经提供了UTF-8,我希望每个严肃的C ++平台都能保持codecvt0x10之间的平等。

可能存在混淆,因为N3242§22.5/ 5说

  

- 多字节序列只能作为二进制文件写入。试图写入文本文件   产生不确定的行为。

这是因为文本模式I / O转换行结尾,因此作为16位UTF-16字的一半的0x13, 0x10字节可以转换为{{1}},从而破坏流。这与糟糕的支持无关......只需确保以二进制模式打开文件,因为您必须使用任何提供此类功能的库。