31 lines
794 B
C++
31 lines
794 B
C++
#ifndef UTIL_HPP
|
|
#define UTIL_HPP
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
#include <string>
|
|
|
|
#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
|