Skip to content
Search for:

# La magie des caractères accentués entre Mac et Linux

Posted on 22/02/2018 by Seboss666

Ah, UTF-8… Pendant que tout le monde s’écharpe pour savoir quelle est la bonne recette d’hamburger sur l’émoji dédié, les techniciens, eux, doivent se débattre avec des choix étranges et des problèmes de compatibilité. De ceux que la norme Unicode était pourtant censé régler…

J’ai mis un peu de temps à mettre le doigt dessus, et à trouver le fond du problème. Quant à la solution, elle n’était pas forcément entre mes mains mais pas si loin. Mais reprenons depuis le début. Lors de la refonte du site d’un de mes clients, il se plaint que certains liens ne fonctionnent pas une fois le livrable déposé sur le serveur. En particulier, les liens vers des documents PDF qui contiennent des accents semblent contrariants.

Pourtant, sur le serveur, les documents sont là, avec les accents correctement placés et affichés. Je soupçonnais un problème d’encodage (genre ISO-8859-15 et UTF-8, la bataille du siècle dernier), ce n’était pas le cas mais je n’en étais pas loin. A force de recherches, de fouilles empiriques comme je peux en faire parfois, je mets le doigt sur quelque chose : en copiant le nom du fichier depuis ma console SSH pour le saisir dans mon navigateur, je découvre une chose :

Lien de la page du site http://www.site.com/assets/uploads/120907_Mise_%C3%A0_disposition_des_documents_pr%C3%A9paratoires_AGM_28-09-2012.pdf Lien créé en copiant le nom du fichier depuis la console SSH http://www.site.com/assets/uploads/120907_Mise_a%CC%80_disposition_des_documents_pre%CC%81paratoires_AGM_28-09-2012.pdf

1 2 3 4 5 | Lien de la page du site http://www.site.com/assets/uploads/120907_Mise_%C3%A0_disposition_des_documents_pr%C3%A9paratoires_AGM_28-09-2012.pdf Lien créé en copiant le nom du fichier depuis la console SSH http://www.site.com/assets/uploads/120907_Mise_a%CC%80_disposition_des_documents_pre%CC%81paratoires_AGM_28-09-2012.pdf

Oui, on constate que les caractères accentués n’ont pas la même tête. Pourtant les deux s’affichent de la même façon à nos yeux. Comment est-ce possible ? Malheureusement, j’ai fait cette découverte juste avant de m’absenter pour me faire opérer, et après avoir transmis mes découvertes, nous n’avons pas eu de retour de l’agence. Mes collègues n’ont pas plus trouvé de détails supplémentaires sur les raisons de cet écart, et le dossier est un peu tombé aux oubliettes.

Mais pendant ma convalescence, à la faveur de ma veille habituelle, je lis une remarque sur les joies de l’encodage entre Mac et Linux, sans plus de détails. Pour une fois mon cerveau fait tilt et je repense à mon client. Je repars donc en mode recherche/lectures, pas évident, et pourtant les utilisateurs de Mac partagent souvent leur mésaventures avec leur univers fermé. Mais je finis par trouver quelques pistes.

### MacOS le fourbe (enfin pas vraiment, mais ça fait du bien de le dire de temps en temps)

En effet, UTF-8 permet d’encoder les caractères accentués de deux façons différentes : soit un caractère accentué « direct » dit composé — U+00E9 pour être précis si on reprend notre « é »– ou format NFC pour Fully Composed; soit un caractère di décomposé, c’est à dire la lettre de base –U+0065 pour la lettre e–, accompagné d’un caractère dit combinant, dans l’exemple un accent aigu (U+0301), soit le format NFD pour Fully Decomposed. Évidemment il n’est pas recommandé de mixer les deux méthodes. Pour les plus furieux, et en anglais, vous pouvez lire cette page Wikipedia sur l’équivalence Unicode.

C’est MacOS le responsable, qui encode les caractères de manière particulière, et notamment les caractères accentués. Les ingénieurs d’Apple ont fait le choix du supporter le deuxième cas, mais le plus « pénible » n’est pas là. Les deux sont valides et pris en charge notamment par le système de fichiers ext4 sous Linux, et on ne verra pas de différence jusqu’à ce qu’on tombe sur un problème similaire à celui que j’ai rencontré. En fait le vrai problème vient surtout du fait que l’éditeur de code utilisé par le développeur qui s’était occupé de renommer les documents a encodé les liens, et plus généralement les fichiers, au format NFC, quand les fichiers sont proposés au format NFD.

### Si c’est supporté, alors on peut corriger

On est sous Linux, on peut pratiquement tout faire, en l’occurrence c’est possible avec rsync :

Shell
rsync -a --delete --iconv=UTF-8-MAC,UTF-8 <source> <destination>

1 | rsync -a --delete --iconv=UTF-8-MAC,UTF-8 <source> <destination>

On peut alors ensuite replacer le contenu converti au bon endroit. Peu après j’ai appris qu’il y avait un utilitaire dédié à cette tâche, qui s’appelle convmv :

Shell
convmv -f utf8 -t utf8 --nfc -r --notest <dossier>

1 | convmv -f utf8 -t utf8 --nfc -r --notest <dossier>

Ça va traiter tous les fichiers du dossier indiqué, et on économise une duplication de fichiers. L’avantage d’rsync étant qu’on peut le faire à distance, donc directement depuis la source et non pas une fois le contenu versé à destination.

### Une fois n’est pas coutume, je n’ai pas pu essayer

Malgré tout, quand j’ai eu l’occasion de reprendre le dossier, après mon retour, une solution un peu plus simpliste a été trouvée par l’agence de développement sans qu’on soit mis au courant : supprimer les accents sur les liens et fichiers problématiques. Bon ben tant pis, on essaiera de faire plus de bricolage une prochaine fois. Ça m’a toutefois donné l’occasion de vous apprendre un ou deux trucs sur Unicode 🙂

Astuces accents, compatibilité, composition, conversion, utf8

### 8 commentaires

- LolYangccool
  22/02/2018 à 21:56

  Personnellement j’applique une règle que l’on m’a toujours conseillé en matière de web : Pas d’accents, de majuscules, d’espaces ou de caractères spéciaux dans les noms de fichier.
  C’est encore le plus simple et on est sur que ça fonctionne sur n’importe quel serveur web. 😉

- Erwann
  23/02/2018 à 01:26

  Je suis tout à fait d’accord avec LolYangccool, c’est la règle que j’ai toujours appliquée à tous mes fichiers (pas seulement dans un contexte web) quelle que soit la plateforme (Windows, Unix, Linux, etc.).
  Pour un bon fonctionnement du système de gestion de fichier et de tous les outils associés (y compris les outils de recherche de fichier et de backup), il est plus que recommandé de ne pas faire dans l’exotisme, c’est-à-dire pas d’accent, ni de cédille, de tréma, et autres particularité linguistique (Å, Æ, Ø, å, æ, ø, …), pas de #, ni de &, etc.
  Pour ma défense, je suis issue d’une époque informatique que les plus jeunes d’entre nous n’ont pas connue …

- xSquid
  23/02/2018 à 07:18

  Bah depuis mes OSs ont UTF-8 comme encodage par défaut, je mets des espaces et autant de caractères exotiques autorisés que je le souhaite…j’suis pas une machine, mais un humain avec des yeux sensibles. Bilan: pas de souci particulier depuis, ni aux yeux ni avec la navigation et l’exploitation des fichiers.
  Pis j’ai une règle avec l’informatique, tant que c’est possible, à la machine de s’adapter à l’humain et pas l’inverse.

  Pour ce qui concerne le Web…là j’applique la règle de la prudence: comme LolYangccool.

- Marcus
  23/02/2018 à 10:58

  Ah ! J’ai eu le souci il y a quelques mois en devant récupérer des archives créées sur mac… Pas eu d’autre choix que de demander à l’auteur de supprimer les accents…
  Ce qu’il a fait bien gentiment.
  Désormais j’ai une solution !
  Merci !

- Buzut
  23/02/2018 à 22:11

  J’ai eu un problème du genre l’autre jour avec les caractères accentués (caractères diacritiques). J’avais posé une question sur SO, mais personne n’avait volé à mon secours
  https://stackoverflow.com/questions/48523029/how-to-convert-combining-diacritical-marks-to-single-grapheme

- r33s
  27/02/2018 à 07:58

  Petite faute de frappe « Apple ont fait le choix du supporter »

  - Seboss666
    27/02/2018 à 13:53

    Euh, c’est écrit « les ingénieurs d’Apple ont fait le choix », jusqu’à maintenant c’est pluriel les ingénieurs 😀

  - Albert H
    21/11/2019 à 13:54

    Alors si on change de sujet pour passer au français correct, je dois dire que ce que j’ai du mal à supporter (sic), c’est l’utilisation de ce verbe dans un sens qu’il n’a pas en français… 🙂

### Archives

Archives

### Favoris

Mon compte Mastodon
Manjaro.org
Restez Curieux
Next INpact
GamAlive
Zwindler's Reflection
LinuxFr.org
Stéphane Robert
La Vache Libre
Le blog d'Edouard
Framablog
Julien HOMMET
Le blog de Genma

### Licence

Sauf mention contraire, le contenu de ce site est mis à disposition sous licence Creative Commons BY-NC v3.0

### Cookies

Bien évidemment ce site utilise des cookies. J'ai détaillé leur utilisation et la façon de s'en passer dans cet article.

### Étiquettes

android apache bash blog configuration contrôle conversion debian depannage developpement dns docker evolution Firefox futur git Google Internet kubernetes linux mail Manjaro mariadb matériel migration mysql nginx opensource partage performances php python qualité réseau serveur ssh sécurité Ubuntu vidéo vie privée virtualisation Web windows wordpress youtube