我将一个应用程序从 Linux 移植到 Windows。在 Linux 上,我使用libmagic库,我不想在 Windows 上摆脱它。
问题是我需要以 UTF-16 编码保存的文件名传递给这样的函数:
int magic_load(magic_t cookie, const char *filename);
不幸的是,它只接受 const char *filename。我的第一个想法是将 UTF-16 字符串转换为本地编码,但存在一些问题——比如字符串可以包含例如中文符号,而本地编码可能是俄语。
结果,我们将在输出中得到垃圾,程序将无法达到其目标。
转换为 UTF-8 也无济于事,因为这是 Windows,而 Windows 以 UTF-16 保存文件名。
但我不知何故需要使该函数能够打开具有 Unicode 名称的文件。
我只找到了一个非常非常糟糕的解决方案:
1. I have a filename
2. I can copy file with unicode name to file with ASCII name like "1.mp3"
3. open it with libmagic functions and get what I want
4. remove temporarily file
但我了解这个解决方案有多糟糕以及它如何使我的应用程序变慢,所以我想知道,也许有一些更好的方法可以做到这一点?
提前感谢任何提示,因为我真的很困惑。