Lister les chemins qui posent problème

Conversion d'un nom de fichier

en un nom n'autorisant que les caractères a-zA-Z0-9 et _.-~

RFC3986

Nom d'un fichier (autorisé par Windows) :

Cliquez sur le bouton "Convertir". Vous pouvez aussi copier/coller le nom de votre fichier dans le champ.

Nom "66" :

Nom "URI" (sur le réseau, dans la barre des URLs d'un navigateur web) :

Règle du convertisseur 66

Des fichiers créés sous Windows peuvent être publiés sur Internet. Toutefois, leurs noms doivent respecter des règles différentes de celles de Windows pour pouvoir être appelés. Le nom d'un fichier sur le réseau doit respecter les règles définies dans la RFC3986.

Liste des caractères ne nécessitant pas de conversion :

a-zA-Z0-9 et -._~

Les caractères  ; , @ & = + $ #  ne requièrent pas de conversion, mais ont une signification particulière dans une URL.

La conversion en "nom 66", conforme à la RFC3986 (mais irréversible), est faite selon les règles suivantes :

  1. L'espace est supprimé et la lettre suivante est mise en majuscule.
  2. Les caractères [a-zA-Z0-9] et _.-~ demeurent inchangés.
  3. é devient e, é => e, è => e, ê => e, ë => e, à => a, â => a, î => i, ï => i, ô => o, ù => u, û => u, ü => u, ÿ => y, æ => ae, œ => oe et ç => c.
  4. À devient A,  => A, Ç => C, É => E, È => E, Ê => E, Ë => E, Î => I, Ï => I, Ô => O, Ù => U, Û => U, Ü => U, Ÿ => Y, Æ => AE, Œ => OE.
  5. Tout autre caractère n'est pas repris.

Nom sous Windows

Pour composer un nom de fichier, les caractères autorisés sont quasi illimités : espace, caractères accentués, spéciaux, hébraïques, chinois, ...

Toutefois, les 9 caractères suivants sont interdits :

 \ / : * ? < > |  (et un espace à la fin d'un nom de fichier ou de dossier)

Un dossier est un fichier spécial ...

Autres limitations

  • Taille max = 256 caractères (extension comprise)
  • Les noms interdits sont : CON, PRN, AUX, NUL, COMx et LPTx (avec x variant de 1 à 9)
  • Le nom ne peut être un seul point, ni deux points.

  • Deux noms ne se distinguant que par la casse ne peuvent pas être enregistrés dans le même dossier.

Recommandations

Le premier caractère ne devrait pas être ~ (tilde), car il est utilisé par Windows pour préfixer les fichiers temporaires masqués.

Les trois premiers caractères ne devraient pas être constitués des chiffres, car le chemin du fichier sera alors de type ...\123xxx\... Si vous modifiez vos chemins par programmation, le résultat pourrait être "surprenant" ! Exemple (sous Python) :

>>> a="H:\2023"; print(a.replace("\\","/"))
H:3
>>> a="H:\a2023"; print(a.replace("\\","/"))
H:2023
>>> a="H:\_2023"; print(a.replace("\\","/"))
H:/_2023

# Solution = utiliser les "raw strings"

>>> a=r"H:\2023"; print(a.replace("\\","/"))
H:/2023

On constate que si le premier caractère est _ (underscore), il peut être suivi de chiffres.

Télécharger un fichier au nom extravagant
  • é ♫ É + ~ 12 à א l'éc le.txt (via "Enregistrer le lien sous")

    Résultat :

    Laissez la souris sur le lien et comparer le nom affichée dans l'URL et celui dans la liste des téléchargements. Le ~ (tilde) a été remplacé par _ (underscore) et le caractère chinois a disparu !

    Le nom d'un fichier sur le disque dur (du développeur), celui accepté (ou non) sur le serveur, celui interprété par le navigateur (au niveau du code source, du texte affiché et du lien affiché lorsque la souris reste sur ce lien), celui affiché dans la liste de vos téléchargements peuvent être différents ...

    Ainsi, dans un nom de fichier, des caractères extravagants peuvent être automatiquement remplacés voire purement et simplement supprimés.

Nom sous Linux

Sous Unix (donc Linux), tous les caractères sont autorisés sauf le  /  puisqu'il permet de distinguer le dossier du fichier. Comme dans une URL ...

Aucune autre limitation.

Comparatif : Windows / Linux

Sous Windows,
de nombreux noms sont interdits.
Sous Linux (Ubuntu)
NB : Le dossier .a est masqué.
Les dossiers z et Z existent.

Recommandations

Le premier caractère ne devrait pas être . (point), car il est utilisé par Linux pour préfixer les fichiers masqués.

XML

Un fichier peut être téléchargé depuis une page web. Son nom est alors indiqué dans un fichier codé en HTML. Mais, si le nom du fichier contient --, l'analyse de la page web peut poser problème.

Longueur d'un nom

Exemple d'URL respectant la règle 66 :
https://trends.levif.be/economie/entreprises/trends-impact-awards-les-entreprises-qui-se-tournent-vers-l-economie-circulaire-sont-pionnieres-dans-un-systeme-voue-a-evoluer/article-normal-1605623.html

Pas d'espace, pas de caractère accentué, pas d'apostrophe, ...

Toutefois, la longueur d'un dossier ou d'un fichier sur le disque dur ne devrait pas être aussi long.
trends-impact-awards-les-entreprises-qui-se-tournent-vers-l-economie-circulaire-sont-pionnieres-dans-un-systeme-voue-a-evoluer = 109 caractères

Le nom d'un fichier ne doit pas être son résumé au risque de finir par avoir des noms "kilométriques".

Actuellement, par défaut, un chemin (lecteur [+ dossier + sous-dossiers] + fichier) ne peut dépasser 260 caractères. Depuis, windows 10 la limite peut être portée à 32 767 caractères ...

Cette limite des 260 caractères peut être dépassée lorsque vous dézippez. Exemple. L'auteur d'un livre vous propose de télécharger un fichier zip contenant des exemples issus de son disque dur, hiérarchisés en dossiers. Si son plus long chemin est de 200 caractères et si le chemin du dossier où vous allez extraire fait 150 caractères => 150 + 200 = 350 et donc supérieur à 260 ...

Jusqu'en 1994, sous Windows, le nom d'un fichier était au format 8.3 (8 caractères suivi d'un point et d'un maximum de 3 caractères).

Si le premier caractère est issu [A-Za-z] et [_-]
Si les 3 suivants sont issus [A-Za-z] et [_-~]
54 * 55 * 55 * 55 = 8 984 250 noms possibles dans un même dossier !
(auxquels on peut ajouter les noms _XXX où X est un chiffre, soit 1000 noms de plus)

Alors, avec 8 caractères ... Vos rêves les plus fous sont comblés. D'autant plus qu'un dossier ne pouvait contenir que 512 fichiers pour une FAT 16 et 65 536 fichiers pour une FAT 32.

Les noms "kilométriques" ne sont valables que s'il ne faut pas les taper dans un terminal. Donc, valables que si on peut ouvrir le fichier en double-cliquant (depuis un explorateur de fichiers) ou en cliquant (sur internet ou intranet).

Sur le web, pas de problème. On ne doit pas chercher. On clique de liens en liens.

Mais, avec un explorateur de fichiers, il faut le choisir dans une liste. Et, si le nom devient trop long (car trop évocateur), cela devient pénible.

Il faut trouver un compromis.

Si on veut gérer ses fichiers par un programme, il faut lui donner une limite.

Comme pour une capture d'écran, le nom du fichier pourrait être du type _YYYY-MM-DD_hh-mm-ss, soit d'une longueur de 20 caractères.

En choisissant une longueur de 32 caractères, cela permet 8 caractères (suivi d'un horodatage) et un point suivi d'une extension de 3 caractères. Des fichiers créés par un programme pourraient alors se nommer :

Ou permettre 17 caractères (suivi d'un datage) et un point suivi d'une extension de 3 caractères. Des fichiers créés par un programme pourraient alors se nommer :

Ou, nommer manuellement avec un nom suffisamment évocateur sans être kilométrique :

Ou l'empreinte MD5 du fichier :

Un fichier ne doit pas obligatoirement avoir une extension. Le dossier le contenant peut être le nom de son extension. Tel que C:\documents\pdf\2e82001926e234a182f37e4cc2acf6f9

Même si l'empreinte MD5 n'est plus recommandée au niveau de la sécurité, elle demeure suffisant pour identifier un fichier (ID). Le nom du fichier correspond à son empreinte MD5.

L'outil sphinx peut créer des dossiers d'une longueur de 32 caractères, tel que 2e82001926e234a182f37e4cc2acf6f9

Conclusion

Les règles de nommage des noms de fichiers varient ... sous Linux, sous Windows, sur le web (cfr RFC3986). Pour éviter de futurs ennuis, mieux prendre de bonnes habitudes maintenant.

La règle "66" - conforme aux règles Unix, Windows et Internet - combat une permissivité "excessive" en n'autorisant que 66 caractères (ne devant pas être encodés pour voyager sur les réseaux).

index.*

L'extension du fichier .xhtml est valide. Toutefois, si le nom du fichier débute par index le serveur Apache devra probablement être correctement reconfiguré.