История изменений
Исправление bonta, (текущая версия) :
В общем L"что-то-там" мой компилятор на x86-64 преобразует в utf-16 кодировку.
Нашел очень легковесную либу, для работы которой нужно всего один хедер подключить (а сама либа в 4 файлах всего идет) http://utfcpp.sourceforge.net
с её помощью я получил то что хотел. Преобразование выглядит так:
wstring toUtf8(const string &str) {
std::wstring ret;
vector<wchar_t> utf16;
utf8::utf8to16(str.begin(), str.end(), back_inserter(utf16));
ret = std::wstring(utf16.begin(), utf16.end());
/*if (ret == L"школа") {
std::wcout << ret << std::endl;
std::wcout
<< ByteMap( (char*)(&ret.front()), ret.size()*sizeof(wchar_t)) << std::endl;
std::wstring _nativeWstr = L"школа";
std::wcout
<< ByteMap( (char*)(&_nativeWstr.front()), _nativeWstr.size()*sizeof(wchar_t)) << std::endl;
}*/
return ret;
}
Если убрать комменты то вообще короткое, можно еще проверку на валидность utfкодировки сделать -ну там что правильно все в файле, пользуя эту либу, но это избытоно, ибо к файлам полное доверие.
А еще похоже это и кросплатформенно. В общем всего в пару строк и высокоуровнево, и либа по коду очень короткая и простая.
Исходная версия bonta, :
В общем L"что-то-там" мой компилятор на x86-64 преобразует в utf-16 кодировку.
Нашел очень легковесную либу, для работы которой нужно всего один хедер подключить (а сама либа в 4 файлах всего идет) http://utfcpp.sourceforge.net
с её помощью я получил то что хотел. Преобразование выглядит так:
wstring YAMLParser::toUtf8(const string &str) {
std::wstring ret;
vector<wchar_t> utf16;
utf8::utf8to16(str.begin(), str.end(), back_inserter(utf16));
ret = std::wstring(utf16.begin(), utf16.end());
/*if (ret == L"школа") {
std::wcout << ret << std::endl;
std::wcout
<< ByteMap( (char*)(&ret.front()), ret.size()*sizeof(wchar_t)) << std::endl;
std::wstring _nativeWstr = L"школа";
std::wcout
<< ByteMap( (char*)(&_nativeWstr.front()), _nativeWstr.size()*sizeof(wchar_t)) << std::endl;
}*/
return ret;
}
Если убрать комменты то вообще короткое, можно еще проверку на валидность utfкодировки сделать -ну там что правильно все в файле, пользуя эту либу, но это избытоно, ибо к файлам полное доверие.
А еще похоже это и кросплатформенно. В общем всего в пару строк и высокоуровнево, и либа по коду очень короткая и простая.