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

2022-06-18  本文已影响0人  e196efe3d7df

做跨平台的小伙伴,肯定遇到过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));
上一篇下一篇

猜你喜欢

热点阅读