我刚开始处理WinXP系统上带有非英文名称的文件名的编程工作。我已经阅读了一些关于Unicode的推荐资料,我认为我基本理解了,但有些部分对我来说仍然不是很清晰。
具体来说,NTFS中存储的文件名称(而不是内容,而是文件的实际名称)采用哪种编码(UTF-8、UTF-16LE/BE)?是否可以使用接受char*的fopen()打开任何文件,还是我只能使用使用wchar_t*并假定采用UTF-16字符串的wfopen()?
我尝试手动将UTF-8编码的字符串提供给fopen(),例如:
unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // 가.txt
FILE* f = fopen((char*)filename, "wb+");
但是结果变成了 'ê°€.txt'。
我曾经认为(可能是错误的观念)使用UTF8编码的字符串可以打开Windows下的任何文件名,因为我模糊地记得一些Windows应用程序传递(char*)而不是(wchar_t*),没有遇到问题。
有人能解释一下这个吗?
char *
并不意味着UTF-8,但可以用于它。没有标准的Win32或C / C ++文件API接受UTF-8作为输入,但第三方库可能会接受。 - Remy Lebeau