StringUtil: Fix Windows encoding in ThousandSeparate

Some locales use non-breaking spaces as separators, so getting the
encoding right is important. If DolphinWX gets a string that isn't
valid UTF-8, it flat out won't display the string.
This commit is contained in:
JosJuice 2018-03-10 12:12:32 +01:00
parent 63838c013b
commit 34be8488a5
1 changed files with 12 additions and 4 deletions

View File

@ -45,15 +45,23 @@ std::string StripQuotes(const std::string& s);
template <typename I> template <typename I>
std::string ThousandSeparate(I value, int spaces = 0) std::string ThousandSeparate(I value, int spaces = 0)
{ {
std::ostringstream oss; #ifdef _WIN32
std::wostringstream stream;
#else
std::ostringstream stream;
#endif
// std::locale("") seems to be broken on many platforms // std::locale("") seems to be broken on many platforms
#if defined _WIN32 || (defined __linux__ && !defined __clang__) #if defined _WIN32 || (defined __linux__ && !defined __clang__)
oss.imbue(std::locale("")); stream.imbue(std::locale(""));
#endif #endif
oss << std::setw(spaces) << value; stream << std::setw(spaces) << value;
return oss.str(); #ifdef _WIN32
return UTF16ToUTF8(stream.str());
#else
return stream.str();
#endif
} }
std::string StringFromBool(bool value); std::string StringFromBool(bool value);