Это решение является вдохновенным решением dk123, но использует языковой зависимый кодекс decec. Результат - в строках, закодированных в локали вместо utf8 (если он не задан как locale):
std::string w2s(const std::wstring &var)
{
static std::locale loc("");
auto &facet = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(loc);
return std::wstring_convert<std::remove_reference<decltype(facet)>::type, wchar_t>(&facet).to_bytes(var);
}
std::wstring s2w(const std::string &var)
{
static std::locale loc("");
auto &facet = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(loc);
return std::wstring_convert<std::remove_reference<decltype(facet)>::type, wchar_t>(&facet).from_bytes(var);
}
Я искал его, но я не могу его найти. Наконец, я обнаружил, что я могу получить правильный грань из std :: locale, используя функцию std :: use_facet () с правильным именем. Надеюсь, это поможет.