std::string wchar_utf8(wstring_view wide, error_code& ec) { // allocate space for worst-case std::string utf8; utf8.resize(wide.size() * 6); if (wide.empty()) return {}; wchar_t const* src_start = wide.data(); utf8_errors::error_code_enum const ret = convert_from_wide<sizeof(wchar_t)>::convert( &src_start, src_start + wide.size(), utf8); if (ret != utf8_errors::error_code_enum::conversion_ok) ec = make_error_code(ret); return utf8; }
string::string(const wstring_view& view) : _base(_Convert<wchar_t>::toUTF8(view.data(), 0, view.size())) { }
string WCSToMBCS(wstring_view sv, unsigned cp) { return sv.length() != 0 ? WCSToMBCS(CheckNonnegativeScalar<int>( sv.length()), sv.data(), cp) : string(); }