utils: Convert fs error messages from multibyte to utf-8

This commit is contained in:
Chun Kuan Lee
2018-09-11 02:08:56 +08:00
parent 6eeac2e628
commit e221368932
5 changed files with 21 additions and 3 deletions

View File

@@ -92,4 +92,20 @@ bool FileLock::TryLock()
}
#endif
std::string get_filesystem_error_message(const fs::filesystem_error& e)
{
#ifndef WIN32
return e.what();
#else
// Convert from Multi Byte to utf-16
std::string mb_string(e.what());
int size = MultiByteToWideChar(CP_ACP, 0, mb_string.c_str(), mb_string.size(), nullptr, 0);
std::wstring utf16_string(size, L'\0');
MultiByteToWideChar(CP_ACP, 0, mb_string.c_str(), mb_string.size(), &*utf16_string.begin(), size);
// Convert from utf-16 to utf-8
return std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t>().to_bytes(utf16_string);
#endif
}
} // fsbridge