Sous xterm, ce fichier s'affiche correctement comme "référent.pdf" avec la commande "ls".
Par contre, sous xfce4-terminal, il s'affiche bizarrement comme "référent.pdf" (notez les accents décalés sur la droite des "e").
From: Charles Plessy <plessy@debian.org>
Subject: Re: Gestion de caractères accentués différentes entre xterm, d'autres émulateurs de terminal, et Emacs (locales correctes)
To: debian-user-french@lists.debian.org
Mail-Followup-To: debian-user-french@lists.debian.org
Resent-From: debian-user-french@lists.debian.org
Le Fri, Oct 28, 2022 at 12:50:19AM +0200, Jean-Philippe Georget a écrit :
Sous xterm, ce fichier s'affiche correctement comme "référent.pdf" avec la commande "ls".
Par contre, sous xfce4-terminal, il s'affiche bizarrement comme "référent.pdf" (notez les accents décalés sur la droite des "e").
Bonjour,
c'est un problème de prise en charge d'Unicode.
Sur mon terminal, je vois référent.pdf dans les deux cas. Mais voici
ce que je vois si je copie-colle le nom de ficher et le passe à hexdump.
echo référent.pdf | hexdump -C
00000000 72 c3 a9 66 c3 a9 72 65 6e 74 2e 70 64 66 0a |référent.pdf.| 0000000f
echo référent.pdf | hexdump -C
00000000 72 65 cc 81 66 65 cc 81 72 65 6e 74 2e 70 64 66 |re?.fe?.rent.pdf|
00000010 0a |.|
00000011
Pour un peu plus de contexte, voici une version pure ASCII sans accents:
echo referent.pdf | hexdump -C
00000000 72 65 66 65 72 65 6e 74 2e 70 64 66 0a |referent.pdf.| 0000000d
Et lettre par lettre:
printf é | hexdump -C
00000000 c3 a9 |é|
00000002
printf e | hexdump -C
00000000 65 |e|
00000001
printf é | hexdump -C
00000000 65 cc 81 |e?.|
00000003
Le dernier é, c'est un e auquel on ajoute ensuite un accent aigu.
Le caractère Unicode U+0301 COMBINING ACUTE ACCENT est encodé cc81 en UTF-8.
Je dois m'arrêter là car mon train arrive en gare, mais une solution
pour contourner le problème pourrait être:
mv r?f?rent.pdf référent.pdf
Ceci change le nom de fichier pour utiliser la représentation la plus habituelle.
D'autres abonnés à cette liste pourront t'indiquer des outils pour le
faire automatiquement.
Amicalement,
Charles Plessy
Autre bizarrerie, un affichage du contenu du répertoire sous midnight commander (mc) affiche les deux noms de fichiers correctement. J'ai l'impression que les "é" sont affichés de la même manière à moins que
ls différences soient très subtiles.
Bonjour,
Pour des raisons de commodités, je vous conseille de
passer par "detox" pour les noms de fichiers...
Pareil ici en lisant ton e-mail via Roundcube dans Firefox.
*Une explication*
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*alors que r??f.pdf permet le retrouver).
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
*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
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 299 |
Nodes: | 16 (2 / 14) |
Uptime: | 38:46:25 |
Calls: | 6,682 |
Files: | 12,223 |
Messages: | 5,343,288 |