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
| 归档时间: |
|
| 查看次数: |
4980 次 |
| 最近记录: |