gtk的文件选择控件得到的文件路径是utf-8编码格式。使用windows的FindFirstFileA之类的ANSI函数在遇到汉字之类的会有问题。需要将字符转换到ANSI本地编码格式才能使用。
std::string sDir;//包含utf-8格式字符的字符串
...
//转换成ansi格式
// 获取需要的缓冲区大小
int bufferSize = MultiByteToWideChar(CP_UTF8, 0, sDir.c_str(), -1, NULL, 0);
// 分配缓冲区
wchar_t* wideStr = new wchar_t[bufferSize];
// 将UTF-8字符串转换为宽字符字符串
MultiByteToWideChar(CP_UTF8, 0, sDir.c_str(), -1, wideStr, bufferSize);
// 获取需要的缓冲区大小
bufferSize = WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL);
// 分配缓冲区
char* ansiStr = new char[bufferSize];
// 将宽字符字符串转换为ANSI字符串
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, bufferSize, NULL, NULL);
//使用ANSI字符
...
// 释放内存
delete[] wideStr;
delete[] ansiStr;