Я только начинаю программировать для обработки имен файлов с неанглийскими именами в системе WinXP. Я прочитал несколько рекомендуемых материалов по юникоду, и я думаю, что понял основную идею, но некоторые части все еще не очень понятны для меня.
В частности, в какой кодировке (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+");
но получилось "ê ° € .txt".
У меня сложилось впечатление (что может быть ошибочным), что строки в кодировке UTF8 будет достаточно для открытия любого имени файла под Windows, потому что я, кажется, смутно помню, как какое-то приложение Windows передавало (char *), а не (wchar_t *), и имело Нет проблем.
Может кто-нибудь пролить некоторый свет на это?
char*
не подразумевает UTF-8, но можно использовать для этого. Никакие стандартные API-интерфейсы файлов Win32 или C / C ++ не принимают UTF-8 в качестве входных данных, но сторонние библиотеки могут - person Remy Lebeau   schedule 17.01.2019