Noms de fichiers UTF 8?


15

Dans les systèmes d'exploitation basés sur Unix, les noms de fichiers utf6 sont-ils autorisés? Si c'est le cas, je dois faire quelque chose de spécial pour écrire le fichier sur le disque.

Permettez-moi d'expliquer ce que j'espère faire. J'écris une application qui transférera un fichier via ftp vers un système distant mais le nom de fichier est défini dynamiquement via un ensemble de métadonnées qui pourraient potentiellement être dans utf8. Je me demande s'il y a quelque chose que je dois faire pour écrire le fichier sur le disque sous unix / linux.

Aussi, à titre de suivi, quelqu'un sait-il ce qui se passerait si je téléchargeais un nom de fichier utf 8 sur un système qui ne prend pas en charge utf8?

Réponses:


20

Sous Unix / Linux, un nom de fichier est une séquence de tout octet à l'exception d'une barre oblique ou d'un NUL. Une barre oblique sépare les composants de chemin et un NUL termine un nom de chemin.

Ainsi, vous pouvez utiliser le codage que vous souhaitez pour les noms de fichiers. Certaines applications peuvent avoir des problèmes avec certains encodages si elles ne savent pas quels caractères peuvent être dans les noms de fichiers - par exemple, les scripts shell mal écrits ne gèrent souvent pas les noms de fichiers avec des espaces.

Les environnements modernes Unix / Linux gèrent très bien les noms de fichiers encodés UTF-8.


12

En interne, la plupart des systèmes de fichiers stockent des octets: le pilote du système de fichiers ne se soucie pas de la signification des octets. Le pilote de système de fichiers générique sous Linux et la plupart des autres unités modernes permet à tout octet autre que /et à l'octet nul d'apparaître dans un nom de fichier.

Il existe des systèmes de fichiers qui peuvent avoir des contraintes de codage - généralement des systèmes de fichiers non natifs tels que FAT ou NTFS. Certains systèmes de fichiers réseau tels que Samba peuvent se traduire entre l'encodage serveur et l'encodage client; vous devez vous assurer que les configurations serveur et client sont cohérentes.

Classiquement, sur la plupart des systèmes, les octets qui composent un nom de fichier sont interprétés comme UTF-8. Si vous exécutez une application qui interprète les noms de fichiers sous forme de caractères, par exemple une application qui transmet les noms via FTP, vous devrez peut-être configurer cette application pour lui indiquer que vos noms de fichiers sont codés en UTF-8. Définir l'environnement LC_CTYPEsur un environnement local UTF-8 comme le en_US.UTF-8fait l'astuce pour de nombreuses applications en ligne de commande.

Si vous stockez des fichiers sur un système qui ne prend pas en charge UTF-8, cela n'a pas d'importance. Les octets resteront les mêmes. Vous ne pourrez pas afficher les caractères qui composent les noms de fichiers, mais si vous copiez les fichiers sur un système qui prend en charge UTF-8, ces mêmes octets s'afficheront toujours en tant que caractères UTF-8.

Si vous écrivez votre propre application, utiliser UTF-8 en interne et, si possible, pour le stockage et la transmission est une bonne idée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.