4

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

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

感谢您的回复。

4

3 回答 3

4

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

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

  1. 调用GetShortPathNameW(unicode 版本)以获取“短”路径字符串。
  2. 将短路径转换为 ​​ANSI 字符串(使用WideCharToMultiByte)。
  3. 将生成的 ANSI 字符串提供给愚蠢的第 3 方库。

现在,如果文件/目录尚不存在 - 您可能无法获得其短路径名。在这种情况下,您应该首先创建它。

于 2010-04-29T08:17:48.613 回答
1

不,除非您可以从修改后的源代码(一项重大任务)重新编译它,否则没有。您可能会更幸运地提供 3rd 方库短文件名,例如AHDF76~4.DOC; 这些文件名使用 ASCII。见GetShortPathName

于 2010-04-28T13:37:11.247 回答
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());

除此以外?

责怪 windows 不支持 UTF-8;-)

于 2010-04-28T16:06:55.487 回答