Предполагая, что вы имеете в виду UTF-16, а не UTF-8 для std::wstring
, вам придется кодировать / декодировать строки из одной библиотеки в другую.Я не уверен, что / что обеспечивает STL для этого, но вы можете использовать собственные функции Windows MultiByteToWideChar()
и WideCharToMultiByte()
для преобразования между UTF-8 и UTF-16 с помощью всего нескольких строк кода.Затем вы можете обернуть это в свои собственные функции, чтобы заменить логику, когда найдете что-то более переносимое, например:
std::wstring Utf8ToUtf16(const std::string &s)
{
std::wstring ret;
int len = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.length(), NULL, 0);
if (len > 0)
{
ret.resize(len);
MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.length(), const_cast<wchar_t*>(ret.c_str()), len);
}
return ret;
}
std::string Utf16ToUtf8(const std::wstring &s)
{
std::string ret;
int len = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), s.length(), NULL, 0, NULL, NULL);
if (len > 0)
{
ret.resize(len);
WideCharToMultiByte(CP_UTF8, 0, s.c_str(), s.length(), const_cast<char*>(ret.c_str()), len, NULL, NULL);
}
return ret;
}