c++ - C++0x 中的 Unicode 支持

标签 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;
}

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

还有像 coutcin 已经为这些类型定义的东西,或者 stdinstdout不支持Unicode?

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

编辑:АТТЕNTION。我发现,标准委员会从 C++0x 中解散了 Unicode 流。因此,以前接受的答案不再正确。如需更多信息,请参阅 my answer !

最佳答案

Unicode 字符串文字支持 began在 GCC 4.5 中。也许这就是问题所在。

[编辑]

经过一番挖掘,我发现 N2035 中描述了这个新的 unicode 字面量的流。它是 included在标准草案中。根据这个文件你需要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);

这样我就可以在我的 Intel 机器上以 UTF-32LE 格式输出你的字符串(这是 little-endian)。

[编辑]

我对 u32ofstream 的状态有点错误:根据latest draft在 C++ 标准委员会的 web site 上你必须使用 std::basic_ofstream<char32_t>像你一样。此类将使用 codecvt<char32_t,char,typename traits::state_type>必须在标准库中实现的类(参见第 27.9.1.1 节末尾)(在文档中搜索 codecvt<char32_t),但在 GCC 4.5 中不可用。

关于c++ - C++0x 中的 Unicode 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704585/

相关文章:

C++上下文切换和互斥问题

c++ - 为什么 boost::asio 似乎什么都不做

windows - 将旧版 Mac OS 日语编码转换为 Windows 中的 Unicode

c# - char在unicode类中吗?

c# - 无法从 FileMode.Append、FileAccess.Write 中的输入流中读取

c++ - 通用成员函数定义

python - 如何在 Python 3 中转义 Unicode

java - 读取 InputStream 字节并写入 ByteArrayOutputStream

c# - 有效拆分以分隔符分隔的消息

c++ - 如何在 C++ 中为 Backus Naur Form 创建规则?-