我将一个应用程序从 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
但我知道这个解决方案有多么糟糕以及它如何使我的应用程序变慢,所以我想知道,也许有更好的方法来做到这一点?
提前感谢任何提示,因为我真的很困惑。
最佳答案
使用 8.3 文件名访问文件。
除了长度最多为 255 个字符的长文件名外,Windows 还会生成 8.3 格式的 MS-DOS 兼容(短)文件名。
关于c++ - Windows 使用带有 UTF-16 的 char * 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14698275/