有第3个lib只接受char * filename,例如3rdlib_func_name(char* file_name)
。当我提供中文或日文的文件名时,每件事都会出错。
有没有办法让这个lib打开UNICODE文件名?该程序在 Windows 上运行。
感谢您的回复。
答案 0 :(得分:4)
我们也有类似的问题。幸运的是有一个解决方案,虽然它有点棘手。
如果文件/目录已存在 - 您可以使用GetShortPathName
功能。生成的“短”路径名称保证不包含非拉丁字符。
GetShortPathNameW
(unicode版本)获取“短”路径字符串。WideCharToMultiByte
)。现在,如果文件/目录尚不存在 - 您可能无法获取其短路径名。在这种情况下,您应该先创建它。
答案 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 ;-)