21#if defined(_WIN32) || defined(_WIN64)
33inline std::string Utf8FromWide(
const std::wstring& wide) {
38 WideCharToMultiByte(CP_UTF8, 0, wide.c_str(), -1,
nullptr, 0,
nullptr,
43 std::string utf8(
static_cast<size_t>(required),
'\0');
44 WideCharToMultiByte(CP_UTF8, 0, wide.c_str(), -1, utf8.data(), required,
46 utf8.resize(
static_cast<size_t>(required - 1));
50inline std::wstring WideFromUtf8(
const std::string& utf8) {
55 MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1,
nullptr, 0);
59 std::wstring wide(
static_cast<size_t>(required), L
'\0');
60 MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, wide.data(), required);
61 wide.resize(
static_cast<size_t>(required - 1));