1

我将一个应用程序从 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 

但我了解这个解决方案有多糟糕以及它如何使我的应用程序变慢,所以我想知道,也许有一些更好的方法可以做到这一点?

提前感谢任何提示,因为我真的很困惑。

4

1 回答 1

5

使用 8.3 文件名访问文件。

除了长达 255 个字符的长文件名外,Windows 还生成一个 8.3 格式的 MS-DOS 兼容(短)文件名。

http://support.microsoft.com/kb/142982

于 2013-02-05T00:40:28.273 回答