Код: Выделить всё
std::locale loc(".950");
using cvttype = std::codecvt;
const auto &cvt = std::use_facet(loc);
std::wstring_convert conv(&cvt);
auto bytes = conv.to_bytes(L"\u4F53"); // 体
auto str = conv.from_bytes(bytes); // range_error("bad conversion")
Я проверил это с парой других кодовых страниц, таких как 949 или 52936, и все с тем же результатом. Раньше я использовал std::codecvt_utf8 без таких проблем; здесь не работает только std::codecvt, основанный на локали.
Почему такое поведение? Можно ли это исправить?
Компиляция с помощью VS 2017.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ecvt-fails