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
为这些类型已经定义,或stdin
与stdout
不支持Unicode?
编辑:我正在使用g ++和Linux.
编辑:АТТЕNTION.我发现,标准委员会驳回了来自C++ 0x的Unicode流.所以以前接受的答案不再正确.欲了解更多信息,请参阅我的答案!
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