有一个第三个库只接受 char* 文件名,例如3rdlib_func_name(char* file_name)
. 当我提供中文或日文文件名时,每件事都会出错。
有没有办法让这个库打开 UNICODE 文件名?该程序在Windows上运行。
感谢您的回复。
我们也有类似的问题。幸运的是有一个解决方案,虽然它有点棘手。
如果文件/目录已经存在 - 您可以使用该GetShortPathName
功能。保证生成的“短”路径名不包含非拉丁字符。
GetShortPathNameW
(unicode 版本)以获取“短”路径字符串。WideCharToMultiByte
)。现在,如果文件/目录尚不存在 - 您可能无法获得其短路径名。在这种情况下,您应该首先创建它。
不,除非您可以从修改后的源代码(一项重大任务)重新编译它,否则没有。您可能会更幸运地提供 3rd 方库短文件名,例如AHDF76~4.DOC
; 这些文件名使用 ASCII。见GetShortPathName
。
您可以尝试将字符串转换为本地代码页:
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;-)