系统语言环境和非Unicode程序

时间:2018-10-25 22:39:56

标签: c++ windows unicode locale

我在本地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

0 个答案:

没有答案