ENV:Visual Studio 2015. I used two methods to convert wstring to string:
//convert wstring to string
std::string to_byte_string(const std::wstring& input)
{
//std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring_convert<std::codecvt_utf8<wchar_t>/*,wchar_t*/> converter;
return converter.to_bytes(input);
}
std::string wstring2string(std::wstring wstr)
{
std::string result;
int len = WideCharToMultiByte(CP_ACP/*CP_UTF8*/, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
char* buffer = new char[len + 1];
WideCharToMultiByte(CP_ACP/*CP_UTF8*/, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
buffer[len] = '\0';
result.append(buffer);
delete[] buffer;
return result;
}
I used a string chs containing Chinese and lao containing Lao as the file path.Both of to_byte_string() results were unsatisfactory.The result of using wstring2string() to convert a path containing Chinese characters is correct, but the path containing Lao characters is incorrect.
result:to_byte_string
wstring2string
int main(int argc, char *argv[])
{
...
std::wstring lao = L"F:/Data/ປະເທດລາວ/2022-12-02.22O";
std::wstring chs = L"F:/Data/中文/2022-12-02.22O";
string chs_str = to_byte_string(chs);
string lao_str = to_byte_string(lao);
std::string str_chs = wstring2string(chs);
std::string str_lao = wstring2string(lao);
...
}
How can we solve the problem of garbled characters when converting wstring type paths containing Lao language into string type? Or is there a method that can successfully convert paths containing Chinese or Lao language?