web-dev-qa-db-fra.com

Quel codage Charset est utilisé pour les noms de fichiers et les chemins sur Linux?

Cela dépend-il de quel système de fichiers que j'utilise? Par exemple, ext2/ext3/ext4 mais aussi ce qui se passe lorsque j'insérite l'un de ces CD-ROM "Joliet" avec ISO 9660? J'ai entendu dire que POSIX contient une sorte de spécification pour le codage de caractères des noms de fichiers?

Essentiellement, ce que je me demande, c'est si j'ai eu un nom de fichier codé UTF-8, quelle transformation/couverture dois-je faire avant de le transmettre à une API d'E/S de fichier sous Linux?

47
martin

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 de codage; L'OS ne traite que par la séquence d'octets. Les applications individuelles peuvent choisir de les interpréter comme codées d'une manière ou d'une autre, mais cela varie.

Plus précisément, GLIB (utilisé par GTK + Apps) suppose que tous les noms de fichiers sont codés UTF-8, quel que soit la locale de l'utilisateur . Cela peut être remplacé par les variables d'environnement g_filename_coding et g_broken_filensames .

D'autre part, QT par défaut à en supposant que tous les noms de fichiers sont codés dans la locale actuelle de l'utilisateur . Une application individuelle peut choisir de remplacer cette hypothèse, bien que je ne connaisse aucune autre chose. Il n'y a pas de commutateur de remplacement externe.

Les distributions de Linux modernes sont configurées de manière à ce que tous les utilisateurs utilisent les locaux UTF-8 et les chemins sur les supports de système de fichiers étrangers sont traduits en UTF-8, de sorte que cette différence de stratégies n'a généralement aucun effet. Toutefois, si vous voulez vraiment être en sécurité, vous ne pouvez assumer aucune structure sur les noms de fichiers au-delà de la "séquence délimitée" - séquence délimitée d'octets ".

(Remarque également: les paramètres régionaux peuvent varier selon le processus. Deux processus différents exécutés par le même utilisateur peuvent être dans différents paramètres locaux simplement en disposant de différentes variables d'environnement.)

50
ephemient

La couche UNIX/POSIX de Linux ne se soucie pas qui codant pour vous utiliser. Il stocke la séquence d'octets de votre codage actuel tel quel.

Je pense que ces options de montage sont là pour vous aider à convertir des systèmes de fichiers spécifiques qui définissent une branchement de caractères à votre système Charset. (CDROMS, NTFS et les variantes de la graisse utilisent des variantes Unicode).

Je souhaite à UNIX définit un codage global système, mais c'est en fait un paramètre par utilisateur. Donc, si vous définissez un codage différent, votre collègue, vos noms de fichiers apparaîtront différemment.

11
Bert Huijben