更新:感谢 @Potatoswatter 和 @Jonathan Leffler 的评论 - 相当尴尬的是,我被调试器工具提示发现没有正确显示 wstring 的值 - 但它仍然不太适合我,我已经更新了问题以下:
如果我有一个小的多字节文件,我想读入一个字符串,我使用以下技巧 - 我使用getline
分隔符为'\0'
e.g.
std::string contents_utf8;
std::ifstream inf1("utf8.txt");
getline(inf1, contents_utf8, '\0');
这会读入整个文件,包括换行符。
但是,如果我尝试用宽字符文件做同样的事情,它就不起作用 - 我的wstring
只读到第一行。
std::wstring contents_wide;
std::wifstream inf2(L"ucs2-be.txt");
getline( inf2, contents_wide, wchar_t(0) ); //doesn't work
例如,如果 unicode 文件包含由 CRLF 分隔的字符 A 和 B,则十六进制如下所示:
FE FF 00 41 00 0D 00 0A 00 42
基于这样的事实,使用带有“\0”的多字节文件 getline 读取整个文件,我相信getline( inf2, contents_wide, wchar_t(0) )
应该读取整个 unicode 文件。然而事实并非如此 - 在上面的示例中,我的宽字符串将包含以下两个 wchar_t:FF FF
(如果我删除 wchar_t(0) ,它会按预期读取第一行(即FE FF 00 41 00 0D 00
)
为什么 wchar_t(0) 不能用作定界 wchar_t 以便 getline 停止00 00
(或者读到我想要的文件末尾)?
谢谢