From 5718b870d1793afaf60944dfc1b086d370389538 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Fri, 26 Oct 2018 14:19:16 +0200 Subject: [PATCH] Use wcsftime instead of strftime on Windows to fix encoding errors Reported by https://forums.dolphin-emu.org/Thread-odd-codes-appear-in-save-load-state-when-chinese-language-is-used --- Source/Core/Common/Timer.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/Timer.cpp b/Source/Core/Common/Timer.cpp index 081dd2008c..1d25cc0f71 100644 --- a/Source/Core/Common/Timer.cpp +++ b/Source/Core/Common/Timer.cpp @@ -7,6 +7,8 @@ #include #ifdef _WIN32 +#include + #include #include #include @@ -203,14 +205,19 @@ std::string Timer::GetTimeFormatted() struct tm* gmTime = localtime(&sysTime); +#ifdef _WIN32 + wchar_t tmp[13]; + wcsftime(tmp, 6, L"%M:%S", gmTime); +#else char tmp[13]; strftime(tmp, 6, "%M:%S", gmTime); +#endif // Now tack on the milliseconds #ifdef _WIN32 struct timeb tp; (void)::ftime(&tp); - return StringFromFormat("%s:%03i", tmp, tp.millitm); + return UTF16ToUTF8(tmp) + StringFromFormat(":%03i", tp.millitm); #elif defined __APPLE__ struct timeval t; (void)gettimeofday(&t, nullptr); @@ -265,9 +272,15 @@ std::string Timer::GetDateTimeFormatted(double time) time_t seconds = (time_t)time + DOUBLE_TIME_OFFSET; tm* localTime = localtime(&seconds); +#ifdef _WIN32 + wchar_t tmp[32] = {}; + wcsftime(tmp, sizeof(tmp), L"%x %X", localTime); + return UTF16ToUTF8(tmp); +#else char tmp[32] = {}; strftime(tmp, sizeof(tmp), "%x %X", localTime); return tmp; +#endif } } // Namespace Common