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));