【发布时间】:2011-02-10 00:56:29
【问题描述】:
std::wifstream theFileHandle;
std::wstring theData;
theFileHandle.open( theFile.Name() );
theFileHandle >> theData;
theFileHandle.close();
谁能告诉我为什么我的字符串 (theData) 只从文件 (theFile) 中获取第一个单词???我希望字符串包含文件中的所有文本,包括空格和换行符,有人对此有建议吗?谢谢。
PS。我需要完美地保存数据。谢谢。
【问题讨论】:
-
我可以保证
>>操作符实际上工作正常。 -
您的 PS“需要完美保存数据”,C++ 范围的流可能不会像您认为的那样。它将文件解释为窄字符(例如,在 Windows 中,为 ANSI)并为您提供相应的宽字符(例如,Unicode)。它可能在 *nix 中使用 UTF-8 编码文件,我不知道,但在 Windows 中,如果文件是 Unicode,你会得到垃圾。是的,这很愚蠢。是的,几乎不可能为这种设计想出任何合理的理由。不,这不是微软的错,而是 C++ iostreams 的设计。一种解决方法是读取二进制数据,然后自己翻译。干杯,
-
@Alf P. Steinbach:只需提供一个 codecvt facet 来进行您想要的转换,iostreams 设计就可以了。 MSVC 自带一个用于 UTF-16LE iirc。
标签: c++