From 16d2ef1ea9bc35e0a30806e1406a9aa6be9d409f Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 21 Sep 2020 11:23:06 +0200 Subject: DolphinQt: Handle non-ASCII characters in Windows cmd arguments CommandLineParse expects UTF-8 strings. (QApplication, on the other hand, seems to be designed so that you can pass in the char** argv untouched on Windows and get proper Unicode handling.) --- Source/Core/Common/StringUtil.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'Source/Core/Common/StringUtil.cpp') diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp index bbc281460c..5ef8b01d24 100644 --- a/Source/Core/Common/StringUtil.cpp +++ b/Source/Core/Common/StringUtil.cpp @@ -31,6 +31,7 @@ #ifdef _WIN32 #include +#include constexpr u32 CODEPAGE_SHIFT_JIS = 932; constexpr u32 CODEPAGE_WINDOWS_1252 = 1252; #else @@ -630,3 +631,22 @@ std::string PathToString(const std::filesystem::path& path) #endif } #endif + +#ifdef _WIN32 +std::vector CommandLineToUtf8Argv(const wchar_t* command_line) +{ + int nargs; + LPWSTR* tokenized = CommandLineToArgvW(command_line, &nargs); + if (!tokenized) + return {}; + + std::vector argv(nargs); + for (size_t i = 0; i < nargs; ++i) + { + argv[i] = WStringToUTF8(tokenized[i]); + } + + LocalFree(tokenized); + return argv; +} +#endif -- cgit v1.2.3