|
|
@ -61,15 +61,17 @@ namespace fs { |
|
|
|
|
|
|
|
|
|
|
|
const std::string GetUTF8DataDir () { |
|
|
|
const std::string GetUTF8DataDir () { |
|
|
|
#ifdef _WIN32 |
|
|
|
#ifdef _WIN32 |
|
|
|
#if ((BOOST_VERSION >= 108500) || STD_FILESYSTEM) |
|
|
|
int size = MultiByteToWideChar(CP_ACP, 0, |
|
|
|
fs_lib::path path (dataDir); |
|
|
|
dataDir.c_str(), dataDir.size(), nullptr, 0); |
|
|
|
#else |
|
|
|
std::wstring utf16Str(size, L'\0'); |
|
|
|
fs_lib::wpath path (dataDir); |
|
|
|
MultiByteToWideChar(CP_ACP, 0, |
|
|
|
#endif |
|
|
|
dataDir.c_str(), dataDir.size(), &utf16Str[0], size); |
|
|
|
auto loc = fs_lib::path::imbue(std::locale( std::locale(), new std::codecvt_utf8_utf16<wchar_t>() ) ); // convert path to UTF-8
|
|
|
|
int utf8Size = WideCharToMultiByte(CP_UTF8, 0, |
|
|
|
auto dataDirUTF8 = path.string(); |
|
|
|
utf16Str.c_str(), utf16Str.size(), nullptr, 0, nullptr, nullptr); |
|
|
|
fs_lib::path::imbue(loc); // Return locale settings back
|
|
|
|
std::string utf8Str(utf8Size, '\0'); |
|
|
|
return dataDirUTF8; |
|
|
|
WideCharToMultiByte(CP_UTF8, 0, |
|
|
|
|
|
|
|
utf16Str.c_str(), utf16Str.size(), &utf8Str[0], utf8Size, nullptr, nullptr); |
|
|
|
|
|
|
|
return utf8Str; |
|
|
|
#else |
|
|
|
#else |
|
|
|
return dataDir; // linux, osx, android uses UTF-8 by default
|
|
|
|
return dataDir; // linux, osx, android uses UTF-8 by default
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|