Windows*使用带有UTF-16的char*函数

Teb*_*ebe 1 c++ windows encoding

我将一个应用程序从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 
Run Code Online (Sandbox Code Playgroud)

但是我理解这个解决方案是如何糟糕的以及它如何使我的应用程序变慢,所以我想,或许有更好的方法来做到这一点?

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

Rob*_*vey 5

使用8.3文件名访问文件.

除了长度不超过255个字符的长文件名外,Windows还会生成8.3格式的MS-DOS兼容(短)文件名.

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

  • 更进一步:http://msdn.microsoft.com/en-us/library/windows/desktop/aa364989(v = vs.85).aspx (3认同)