1

我有很宽的字符串,我正在将它写入我以 out|binary 模式打开的 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();
4

2 回答 2

1

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

于 2010-09-02T17:42:39.210 回答
0

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

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

于 2010-03-09T20:33:17.867 回答