Garbled code problem when converting wstring to string(About Minor Languages)

49 Views Asked by At

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?

0

There are 0 best solutions below