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

时间:2010-03-04 15:12:03

标签: c++ stl wofstream

我有一个宽字符串,我正在将它写入我以二进制模式打开的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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

如果您使用的是UTF-8语言环境,它会将宽字符串转换为UTF-8编码文本(但MSVC不提供UTF-8语言环境),因此通常它会尝试转换为某些代码页,如cp1251或ASCII