如何在Windows上打开带有UNICODE文件名的文件?

时间:2010-04-28 13:25:09

标签: unicode fopen

有第3个lib只接受char * filename,例如3rdlib_func_name(char* file_name)。当我提供中文或日文的文件名时,每件事都会出错。

有没有办法让这个lib打开UNICODE文件名?该程序在 Windows 上运行。

感谢您的回复。

3 个答案:

答案 0 :(得分:4)

我们也有类似的问题。幸运的是有一个解决方案,虽然它有点棘手。

如果文件/目录已存在 - 您可以使用GetShortPathName功能。生成的“短”路径名称保证不包含非拉丁字符。

  1. 调用GetShortPathNameW(unicode版本)获取“短”路径字符串。
  2. 将短路径转换为ANSI字符串(使用WideCharToMultiByte)。
  3. 将生成的ANSI字符串提供给愚蠢的第三方库。
  4. 现在,如果文件/目录尚不存在 - 您可能无法获取其短路径名。在这种情况下,您应该先创建它。

答案 1 :(得分:1)

不,除非您可以从修改后的来源(一项重大事业)重新编译它,否则没有。您可能会更好地为第三方库提供短文件名,例如AHDF76~4.DOC;这些文件名使用ASCII。请参阅GetShortPathName

答案 2 :(得分:0)

您可以尝试将字符串转换为本地代码页:

setlocale(LC_ALL,"Japanese_Japan.932");
std::string file_name = convert_to_codepage_932(utf16_file_name);
3rdlib_func_name(file_name.c_str());

否则?

责备窗口不支持UTF-8 ;-)