在Windows中使用UTF8字符串的fopen文件名

bin*_*ang 3 c++ winapi opencv file utf-8

当我使用opencv的API时cvLoadImage(const char *filename, int iscolor)它接受const char *文件名.当文件名不是ASCII字符时,我试图将其转换为UTF8字符串.它失败,因为fopen()被调用cvLoadImage()无法将文件名的字符字面解释为ASCII字符串._wfopen()如果尝试打开文件名,我可能会使用,但如果fopen()在第三方库中调用,是否有任何方法来处理此问题?谢谢.

W.B*_*.B. 9

使用GetShortPathName.它将返回文件的旧(8.3)名称,您应该能够将其转换为char*,因为它不应包含任何非ASCII字符.

我刚用一些特定于语言的字符对它进行了测试,它就像我描述的那样工作.我已经C:\?????\?ó?ó?.tsttgbb使用fopen 成功打开了一个文件.

  • 禁用在 NTFS 上创建短文件名是管理员的常见做法。您的解决方案适用于这种情况吗?从您的链接引用:_Resilient File System (ReFS​​) 不支持短名称。如果在磁盘上没有任何短名称的路径上调用 GetShortPathName,则调用将成功,但将返回长名称路径。对于 NTFS 卷也可能出现这种结果,因为**不能保证给定的长名称会存在短名称**_。 (2认同)

小智 5

setlocale(LC_ALL, ".65001");\n\nfopen(u8"\xe4\xb8\xad\xe6\x96\x87\xe8\xb7\xaf\xe5\xbe\x84.txt", "rb"); //window7(\xe4\xb8\xad\xe6\x96\x87) vs2017 ok\n
Run Code Online (Sandbox Code Playgroud)\n