当我尝试使用Visual C ++中的以下函数将char *转换为wstring时,该函数能够以正常的英语语言转换字符串,但是当我使用其他语言的字符时,它并不能转换所有字符。
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数组是正常的英文字符时得到它。
最佳答案
我认为您应该将代码更改为以下内容:
std::wstring s2ws(const char* utf8Bytes)
{
const std::string& str(utf8Bytes);
int size_needed = MultiByteToWideChar(CP_ACP, 0, &str[0], (int)str.size(), NULL, 0);
std::wstring wstrTo(size_needed, 0);
MultiByteToWideChar(CP_ACP, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
here列出了两个标志之间的差异。
关于c++ - 无法将字符数组转换为具有utf-8字符的wstring,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52328487/