C++ 0x中的Unicode支持

Umm*_*mma 16 c++ unicode stream c++11

我正在尝试在C++ 0x中使用新的unicode字符.所以我写了示例代码:

#include <fstream>
#include <string>
int main()
{
    std::u32string str = U"Hello World";

    std::basic_ofstream<char32_t> fout("output.txt");

    fout<<str;  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是在执行这个程序后,我得到了空的output.txt文件.那么为什么它不打印Hello World?

也有一些像cout,并cin为这些类型已经定义,或stdinstdout不支持Unicode?

编辑:我正在使用g ++和Linux.

编辑:АТТЕNTION.我发现,标准委员会驳回了来自C++ 0x的Unicode流.所以以前接受的答案不再正确.欲了解更多信息,请参阅我的答案!

ssm*_*mir 6

Unicode字符串文字支持始于 GCC 4.5.也许这就是问题所在.

[编辑]

经过一些挖掘后,我发现N2035中描述了这个新的unicode文字的流,它包含在标准草案中.根据此文档,您需要u32ofstream输出字符串,但GCC 4.5 C++ 0x库中不存在此类.

作为一种解决方法,您可以使用普通的fstream:

std::ofstream fout2("output2.txt", std::ios::out | std::ios::binary);
fout2.write((const char *)str.c_str(), str.size() * 4);
Run Code Online (Sandbox Code Playgroud)

这样我就可以在我的Intel机器上输出你的字符串UTF-32LE(这是一个小端).

[编辑]

我的状态有点不对u32ofstream:根据C++标准委员会网站上的最新草案,你必须像你一样使用.该类将使用必须在标准库中实现的类(参见§27.9.1.1的结尾)(在文档中搜索),但它在GCC 4.5中不可用.std::basic_ofstream<char32_t>codecvt<char32_t,char,typename traits::state_type>codecvt<char32_t