Bonjour,

Tout d'abord, je remercie tous les participants à ce fil de discussion qui 
m'ont permis de trouver une solution seulement aujourd'hui et après une bonne 
petite heure de recherche et de tests (car, oui, je n'ai pas trouvé tout de 
suite la solution ;-)


*Le problème*

Des caractères accentués de certains noms de fichiers sont codés sur deux 
caractères malgré le fait que ce soient des caractères Unicode.
Par exemple "é" est codé avec "e" et un accent aigu, "à" est codé avec "a" et 
un accent grave.

Cela cause des bizarreries quand on veut les renommer (il faut effacer deux 
caractères au lieu d'un, le curseur ne se positionne pas au bon endroit) ou les 
rechercher (on ne les retrouve pas, par exemple r?f.pdf ne permet pas de 
retrouver réf.pdf alors que r??f.pdf permet le retrouver).


*Une solution*

Convertir le nom du fichier de utf-8 à utf-8 en respectant la norme NFC

convmv -f utf-8 -t utf-8 --nfc --notest filename


On peut aussi traiter récursivement une hiérarchie de dossiers/fichiers en 
ajoutant un "-r".

convmv -r -f utf8 -t utf8 --nfc --notest path/



*Une explication*

Les noms de fichier avec lesquels j'ai des problèmes proviennent d'ordinateurs 
fonctionnant sous MacOs.

Effectivement, le système de fichiers HFS (ou HFS+) de MacOs utilise une forme 
d'Unicode spécifique (no comment :-]), la forme NFD (NFC normalization form D). 
Or Linux utilise la forme NFC (normalization form C).

https://fr.wikipedia.org/wiki/Normalisation_Unicode
- Norme NFD (MacOs) : les caractères diacritiques sont codés sous une forme 
décomposée ("é" est en fait "e" + l'accent aigu)
- Norme NFC (Linux) : les caractères diacritiques sont codés sous une forme 
composée ("é" est un seul caractère unicode)


Quand on enregistre sur un ordinateur Linux un fichier créé sur MacOs, il n'y a 
pas de conversion entre les normes. Le nom de fichier codé en NFD reste en NFD, 
il n'est pas transformé en NFC. En particulier, deux noms de fichiers 
identiques à l'affichage peuvent donc cohabiter dans le même dossier alors que 
ces noms sont différents puisque codés avec des caractères différents.

Intérêt des deux normes (pour ce que j'ai compris ;-)
NFC : un code par caractère affiché, pratique pour identifier de manière unique 
des lettres, des mots, etc.

NFD : pratique pour faire des recherches/comparaisons sans tenir compte des 
caractères diacritiques (accents, trémas, etc.). Une recherche sur le mot 
"education" (sans accent) permet aussi de retrouver "éducation".


Linus Torvalds déplore l'utilisation de la NFD pour le système de fichier HFS+
https://www.cio.com/article/251059/linus-torvalds-apples-hfs-is-probably-the-worst-file-system-ever.html


Et moi aussi, je le déplore ! ;-)
Jean-Philippe 

Répondre à