#ifndef UTIL_HPP #define UTIL_HPP #ifdef _WIN32 #include #endif #include #ifdef _WIN32 std::string ansi_to_u8(const std::string& str) { int wideCharLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0); if (wideCharLen <= 0) { return ""; } std::wstring wideStr(wideCharLen, L'\0'); MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, &wideStr[0], wideCharLen); int utf8Len = WideCharToMultiByte(CP_UTF8, 0, wideStr.c_str(), -1, nullptr, 0, nullptr, nullptr); if (utf8Len <= 0) { return ""; } std::string utf8Str(utf8Len, '\0'); WideCharToMultiByte(CP_UTF8, 0, wideStr.c_str(), -1, &utf8Str[0], utf8Len, nullptr, nullptr); utf8Str.resize(utf8Len - 1); return utf8Str; } #endif #endif // UTIL_HPP