我刚刚开始编写一些程序来处理WinXP系统上具有非英文名称的文件名.我已经完成了一些关于unicode的推荐阅读,我认为我得到了基本的想法,但有些部分对我来说仍然不是很清楚.
具体来说,什么编码(UTF-8,UTF-16LE/BE)是存储在NTFS 中的文件名(不是内容,而是文件的实际名称)?是否可以使用fopen()打开任何文件,它接受一个char*,或者我别无选择,只能使用wfopen(),它使用wchar_t*,并且可能需要一个UTF-16字符串?
我尝试手动输入UTF-8编码的字符串给fopen(),例如.
unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // ?.txt
FILE* f = fopen((char*)filename, "wb+");
Run Code Online (Sandbox Code Playgroud)
但这就是'ê°€.txt'.
我觉得UTF8编码的字符串足以打开Windows下的任何文件名,因为我似乎依稀记得一些Windows应用程序传递(char*),而不是(wchar_t*),并且没问题.
任何人都可以对此有所了解吗?
我一直在使用 stat() 来检查文件是否存在,据我所知,这是比尝试打开文件更好的做法。但是, stat() 不适用于包含其他语言的 unicode 字符的文件名。是否有 stat() 的宽字符版本,或者我可以使用的等效版本?
如果没有,检查文件存在的下一个可接受的解决方案是什么?