【发布时间】:2010-03-04 15:12:03
【问题描述】:
我有一个宽字符串,我正在将它写入我以 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();
【问题讨论】:
-
你能给我们一些代码吗
-
这里的潜在解决方案:stackoverflow.com/questions/207662/…
-
简短回答:因为 IOstream 库已损坏。 ;) 宽流只需要一串宽字符并将它们转换为常规字符,然后将它们写入流。所以
L"Hello world"写成"Hello world"。荒谬,但真实。 -
@jaff:不,不是。之所以这样设计,是因为并非所有系统都支持磁盘上的 unicode,因此该标准假定磁盘格式为 ANSI,即使内部是 unicode。