[英]std::wofstream operator<< not working as expected
我是一个Visual Studio 2015用户,正在尝试编写以下功能:
void saveWordsToFile(const std::string& filename, const std::vector<std::pair<std::wstring, std::wstring>>& words)
{
std::wofstream fs(filename, std::ios::out | std::ios::app);
if (fs.fail()) throw std::runtime_error("loadTextFromFile -> Failed to open '" + filename + "'!");
for (auto& word : words) fs << word.first << " " << word.second << std::endl;
fs.close();
}
int main()
{
std::vector<std::pair<std::wstring, std::wstring>> words;
words.push_back({ L"1", L"green" });
words.push_back({ L"ż", L"yellow" });
words.push_back({ L"3", L"purple" });
saveWordsToFile("database.txt", words);
return 0;
}
程序执行前,文件database.txt如下所示:
0 test
执行后,我期望:
0 test
1 green
ż yellow
3 purple
但是我得到了:
0 test
1 green
很容易看到字符“ż”是问题的原因,但是我需要使用它,如何获得正确的输出?
在我的系统上,该流尝试使用wcrtomb
将L'ż'
转换为字节流,但转换失败(可能是由于语言环境问题?)。
此时,流以fs.bad()
返回true结束,并且跳过了任何其他输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.