我是一名尝试编写以下功能的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
很容易看出字符“ż”是一个问题原因,但我需要使用它,如何获得正确的输出?
答案 0 :(得分:0)
在我的系统上,流尝试使用wcrtomb
将L'ż'
转换为字节流,但转换失败(可能是由于区域设置问题?)。
此时,流最终以fs.bad()
返回true,并跳过任何进一步的输出。