Me cuesta entender cómo funciona la codificación del nombre del archivo. En unix.SE encuentro explicaciones contradictorias.
Los nombres de los archivos se almacenan como caracteres.
Para citar otra respuesta: varias preguntas sobre la codificación de caracteres del sistema de archivos en Linux
[…] Como mencionas en tu pregunta, un nombre de archivo UNIX es solo una secuencia de caracteres; el kernel no sabe nada acerca de la codificación, que es completamente un concepto de espacio de usuario (es decir, de nivel de aplicación).
Si los nombres de archivo se almacenan como caracteres, debe haber algún tipo de codificación involucrada, ya que finalmente el nombre del archivo debe terminar como una secuencia de bits o bytes en el disco. Si el usuario puede elegir cualquier codificación para asignar los caracteres a una secuencia de bytes que se alimenta al núcleo, es posible crear cualquier secuencia de bytes para un nombre de archivo válido.
Suponga lo siguiente: un usuario utiliza una codificación aleatoria X , que traduce el archivo foo
a la secuencia de bytes α y lo guarda en el disco. Otros usos de los usuarios que codifica Y . En esta codificación, α se traduce en /
, que no está permitido como nombre de archivo. Sin embargo, para el primer usuario el archivo es válido.
Supongo que este escenario no puede suceder.
Los nombres de archivo se almacenan como blobs binarios
Para citar otra respuesta: ¿Qué codificación charset se usa para nombres de archivos y rutas en Linux?
Como han señalado otros, no hay realmente una respuesta a esto: los nombres de archivo y las rutas no tienen codificación; El sistema operativo solo se ocupa de la secuencia de bytes. Las aplicaciones individuales pueden elegir interpretarlas como codificadas de alguna manera, pero esto varía.
Si el sistema no trata con caracteres, ¿cómo se pueden prohibir caracteres particulares (por ejemplo, /
o NULL
) en los nombres de archivo? No hay noción de a /
sin una codificación.
Una explicación sería que el sistema de archivos puede almacenar nombres de archivos que contienen cualquier
carácter y son solo los programas de usuario los que tienen en cuenta una codificación que se atragantaría con los nombres de archivos que contienen caracteres no válidos. Eso, a su vez, significa que los sistemas de archivos y el núcleo pueden, sin ninguna dificultad, manejar los nombres de archivo que contienen a /
.
También supongo que esto está mal.
¿Dónde tiene lugar la codificación y dónde se plantea la restricción de no permitir caracteres particulares?