代码之家  ›  专栏  ›  技术社区  ›  Scott Langham

为什么我的std::wofstream会编写ansi?

  •  1
  • Scott Langham  · 技术社区  · 16 年前

    我有一个宽字符串,我把它写到了一个以out二进制模式打开的wofstream中。当我查看结果文件时,它每隔一个字节都会丢失。

    当我用二进制编辑器在Visual Studio中打开该文件时,我希望每隔一个字节都看到一个零,但我没有看到零。

    你知道我错过了什么吗?

    谢谢。


    代码是这样的:

    CAtlStringW data = L"some data";
    wofstream stream("c:\hello.txt", ios_base:out|ios_base:binary);
    stream.write( data.GetBuffer(), data.GetLength() );
    stream.close();
    
    2 回复  |  直到 12 年前
        1
  •  0
  •   Artyom    16 年前

    当使用输出宽流写入文件时,实际发生的情况是它将宽字符转换为其他8位编码。

    如果您使用的是UTF-8区域设置,它会将宽字符串转换为UTF-8编码文本(但MSVC不提供UTF-8区域设置),因此通常它会尝试转换为一些代码页,如CP1251或ASCII。

        2
  •  1
  •   Olivier Comte    15 年前

    参见页面底部的“社区内容” http://msdn.microsoft.com/en-us/library/f1d6b0fk(VS.80).aspx . 简而言之,您必须使用pubsetbuf()为流使用基于wchar的内部缓冲区(而不是基于char的)。