Estoy empezando una programación para manejar nombres de archivos con nombres no ingleses en un sistema WinXP. He hecho algunas lecturas recomendadas en Unicode y creo que tengo la idea básica, pero algunas partes aún no son muy claras para mí.¿Qué codificación tienen los nombres de archivo en NTFS almacenados como?
Específicamente, ¿qué codificación (UTF-8, UTF-16LE/BE) son los archivos nombres (no el contenido, sino el nombre real del archivo) almacenados en NTFS? ¿Es posible abrir cualquier archivo usando fopen(), que toma un char *, o no tengo otra opción que usar wfopen(), que usa un wchar_t *, y presumiblemente toma una cadena UTF-16?
He intentado alimentar manualmente en una cadena codificada en UTF-8 a fopen(), por ej.
unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // 가.txt
FILE* f = fopen((char*)filename, "wb+");
pero esto salió como 'ê °' .txt '.
Tenía la impresión (que puede ser incorrecta) de que una cadena con codificación UTF8 sería suficiente para abrir cualquier nombre de archivo en Windows, porque parece recordar vagamente alguna aplicación de Windows que pasa (char *), no (wchar_t *), y no tener problemas.
¿Alguien puede arrojar algo de luz sobre esto?
El comportamiento de PHP ha cambiado desde PHP 7.1 en adelante, consulte https://stackoverflow.com/a/38466772/680382 – gogowitsch