J'ai du mal à comprendre comment fonctionne l'encodage du nom de fichier. Sur unix.SE je trouve des explications contradictoires.
Les noms de fichiers sont stockés sous forme de caractères
Pour citer une autre réponse: plusieurs questions sur le codage des caractères du système de fichiers sous Linux
[…] Comme vous le mentionnez dans votre question, un nom de fichier UNIX n'est qu'une séquence de caractères; le noyau ne sait rien de l'encodage, qui est entièrement un concept d'espace utilisateur (c'est-à-dire au niveau de l'application).
Si les noms de fichiers sont stockés sous forme de caractères, il doit y avoir une sorte d'encodage impliqué, car finalement le nom de fichier doit finir comme une séquence de bits ou d'octets sur le disque. Si l'utilisateur peut choisir n'importe quel encodage pour mapper les caractères à une séquence d'octets qui est envoyée au noyau, il est possible de créer n'importe quelle séquence d'octets pour un nom de fichier valide.
Supposons ce qui suit: Un utilisateur utilise un codage aléatoire X , qui traduit le fichier foo
dans la séquence d'octets α et l'enregistre sur le disque. Une autre utilisation de l' utilisateur codant pour Y . Dans ce codage, α se traduit par /
, ce qui n'est pas autorisé comme nom de fichier. Cependant, pour le premier utilisateur, le fichier est valide.
Je suppose que ce scénario ne peut pas se produire.
Les noms de fichiers sont stockés sous forme de blobs binaires
Pour citer une autre réponse: quel codage de jeu de caractères est utilisé pour les noms de fichiers et les chemins sous Linux?
Comme indiqué par d'autres, il n'y a pas vraiment de réponse à cela: les noms de fichiers et les chemins n'ont pas d'encodage; le système d'exploitation ne traite que la séquence d'octets. Les applications individuelles peuvent choisir de les interpréter comme étant codées d'une manière ou d'une autre, mais cela varie.
Si le système ne gère pas les caractères, comment des caractères particuliers (par exemple /
ou NULL
) peuvent-ils être interdits dans les noms de fichiers? Il n'y a aucune notion d'un /
sans encodage.
Une explication serait que le système de fichiers peut stocker des noms de fichiers contenant n'importe quel
caractère et que seuls les programmes utilisateur qui prennent en compte un codage s'étoufferaient avec des noms de fichiers contenant des caractères non valides. Cela, à son tour, signifie que les systèmes de fichiers et le noyau peuvent, sans aucune difficulté, gérer les noms de fichiers contenant a /
.
Je suppose également que c'est faux.
Où s'effectue l'encodage et où se situe la restriction de ne pas autoriser certains caractères?