美文网首页
c++路径包含中文打不开

c++路径包含中文打不开

作者: e196efe3d7df | 来源:发表于2022-06-18 17:31 被阅读0次

    做跨平台的小伙伴,肯定遇到过linux上,无论路径是否包含中文都能顺利打开,但是在windows系统,就会有问题,很多与路径有关的stl函数,都有了问题,比如ifstream,ofstream,filesystem::exists,filesystem::remove等等,都会出问题,那怎么办呢,是不是想到了把utf8转gb2312,这是个方法,但是需要判断平台,写一些宏,进行区分,比如:

    #ifdef _WIN32
    #include <windows.h>
    std::string UTF8ToGBEx(const char *utf8)
    {
        if (!utf8 || strlen(utf8) < 1)
            return "";
    
        std::stringstream ss;
        int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
        wchar_t *wstr = new wchar_t[len + 1];
        memset(wstr, 0, len + 1);
        MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
        len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
        char *str = new char[len + 1];
        memset(str, 0, len + 1);
        WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
        ss << str;
        delete[]wstr;
        delete[]str;
        return ss.str();
    }
    #endif // WIN32
    

    还有一种方法,如果你用的是c++14以上的版本,就会有一个std::experimental::filesystem::u8path这样的一个好东西,用这个把你的路径包一下,就ok 了!简单优雅!

    std::experimental::filesystem::exists(std::experimental::filesystem::u8path(fileName));
    

    相关文章

      网友评论

          本文标题:c++路径包含中文打不开

          本文链接:https://www.haomeiwen.com/subject/cntlvrtx.html