Когда я пытался преобразовать char * в wstring, используя нижеприведенную функцию в Visual C ++. Функция способна преобразовывать строки на обычном английском языке, но когда я использую символы из другого языка, она не преобразует все символы.
std::wstring s2ws(const char* utf8Bytes)
{
const std::string& str(utf8Bytes);
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
std::wstring wstrTo(size_needed, 0);
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
Пример:
Когда я печатаю преобразованное значение в MessageBox, Grüßen отображается как Gr ?? en
Я использую эту преобразованную строку wstring для получения содержимого моего каталога, как показано ниже:
map<wstring, wstring> getAllFiles(wstring folder, wstring filter) {
wstring directory = folder + L"/" + filter;
WCHAR szBuf[MAX_PATH];
WIN32_FIND_DATA d;
HANDLE hFindFile = FindFirstFile(directory.c_str(), &d);
.....
}
Здесь я не получаю ожидаемый результат. то есть содержимое каталога. Но получается, когда массив utf8bytes содержит нормальные английские символы.