我在本地d驱动器中有一个文件:d:\système.gz(此文件在其他区域生成。请注意è。)
我正在尝试使用非Unicode可执行文件使用fopen打开此文件。将非unicode程序的系统区域设置设置为“英语(美国)”时,以下代码有效。
如果我将此语言环境更改为“日语(日本)”(在“区域设置”下),则fopen失败。
这是字符串'système.gz'的内存外观:
1:英语(美国)
73 79 73 74 e8 6d 65 2e 67 7a
2:日语(日本)
73 79 73 74 65 6d 65 2e 67 7a
如何正确处理这种情况?我必须调用一些API来在代码中设置语言环境吗?
std::string path = "d:";
for (auto & p : fs::directory_iterator(path))
{
std::string fName = p.path().filename().string();
std::string ext = p.path().extension().string();
if (ext == ".gz")
{
std::string drive = "d:\\" ;
std::string fullPath = drive + fName;
const char * strPath = fullPath.c_str();
FILE * fp = fopen(strPath, "rb");
if (!fp)
{
printf("\nNot found\n");
}
fclose(fp);
}
}
如果我使用:
p.path().filename().u8string()
然后内存更改为:(但是fopen仍然会失败)
73 79 73 74 c3 a8 6d 65 2e 67 7a