Épisode 7 de découvrir Linux dans lequel on s’intéresse aux tables de caractères
Version texte:
Découvrir GNU/Linux épisode 7
Lors du dernier épisode, que je vous recommande chaudement de regarder car celui ci en est la suite, je mets le lien dans une fiche ici ainsi que dans la boite de description; donc dans le dernier épisode, je m’étais arrêté avec un suspense insoutenable, si si, je vous assure, car je parlais des intervalles de caractères qui vont être différents en fonction des langues. Et ben on va commencer par ça !
//
// GÉNERIQUE //
//
Alors, pour présenter le problème, je rappelle ce qu’on disait. On a des métacaractères pour faire des motifs qui vont représenter des noms de fichiers. Et dans ces motifs, on peut représenter un caractère dans une liste à l’aide des crochets. C’est à dire que si j’écris un truc du genre photo crochet ouvrant a b c crochet fermant, ça va représenter le motif « tous les fichiers qui commencent par photo suivis d’un a OU d’un b OU d’un c ». Mais le motif ne fonctionnera pas avec photoab parce que il y a deux caractères.
— J’ai rien compris !
Vraiment ? C’était pas clair ?
— Si si, je déconne, et je viens de regarder le premier épisode donc ça va !
…
— Mais du coup, tu disais que c’était un peu casse pied d’écrire des grandes listes de caractères comme crochet ouvrant, zéro un deux trois quatre cinq six sept huit neuf
Oui et on a une astuce pour en écrire moins !
— Oui c’est de mettre un tiret, pour que ça fasse juste crochet ouvrant zéro tiret neuf. Mais je comprends pas pourquoi ça ne marcherait pas avec des lettres, du genre a minuscule, tiret, z minuscule…
C’est pas trivial. Pour comprendre ça, on va se poser… une autre question. Tu sais que les ordinateurs, donc ton Linux, ils ne travaillent qu’avec des nombres. Du coup tout est converti en nombres.
— Oui t’en avais déjà parlé dans la vidéo sur le terminal je crois.
Oui c’est ça. Alors, historiquement, on a utilisé une table de caractères, qui n’est qu’un tableau qui associe un caractère à un nombre. Par exemple le A majuscule, c’est le caractère numéro 65, le B le 66, etc. Et on a aussi des numéros pour piloter le terminal, c’est à dire pour effacer l’écran ou faire un bip etc etc.
Du coup, toujours historiquement, quand on écrivait A-Z entre crochet, ça voulait dire tous les caractères entre le grand A et le grand Z de la table des caractères. Et logiquement, crochet ouvrant A majuscule tiret z majuscule crochet fermant ça représente bien une majuscule. Et on a la même chose pour les minuscules avec a minuscule tiret z minuscule.
Alors, où se trouve le problème. Et bien le problème, il apparaît quand on sort de la langue anglaise, et notamment quand on a commencé à utiliser cette technique en France.
— Ben pourquoi ça ?
Parce qu’en anglais, on n’a pas tout à fait les mêmes caractères qu’en français. Et du coup, il n’y a pas le e accent aigue ou la cédille dans la table ASCII, par exemple. Alors il a fallu ruser pour y arriver. La première solution, ça a été de prendre la table ASCII, et quand tu la regardes, tu peux constater qu’elle n’a que 128 caractères
— Ah ben oui tiens, j’avais jamais fait gaffe !
Et dans un octet, on peut mettre combien de nombres, donc combien de caractères ?
— Heu attends, je sais ça ! Heu, c’est pas 256 ?
Oui, c’est 256. Alors il nous reste de la place pour ajouter nos caractères à nous et que ça tienne dans un octet.
— Ah c’est comme ça qu’on fait ? Mais ça explique pas pourquoi crochet petit a tiret petit z crochet ça me donne pas les minuscules
T’as à moitié raison. C’est comme ça qu’on faisait, avant ! Mais c’est pas super pratique. Déjà parce que ça fait que 128 caractères à rajouter, et si ajoute les caractères français, la tilde pour les espagnols, l’umault allemand et tous ces autres caractères ça se remplit vite ! Surtout si tu penses aux grecs, ou à ceux qui utilisent l’écriture cyrillique, comme les russes.
— Ah oui, ça tient pas ? Y’a pas la place ?
Non, ça fait trop. Du coup, on a la table ISO-8859-7 pour les grecs, mais la -15 pour la France, ou la -5 pour les russes, la -8 pour l’hébreux etc etc etc.
— Ben ça marche alors ! On a trouvé une solution !
Localement oui ! Mais quand tu as un grec qui envoie un email à un français en mettant un turc en copie, ben les trois correspondants utilisent des tables différentes. Ce qui fait que au lieu de voir du grec, on voit un truc qui ne veut rien dire !
— Ahhhhh je vois. Ça peut juste marcher à l’endroit où on est !
Oui y’a pas ou peu d’interropérabilité et surtout tout le monde utilise des tables différentes. En plus j’ai une question pour toi. Qu’est-ce qu’on met comme caractère entre le D et le F ?
— Ben le e !
Et…?
— le e c’est tout, non ?
Tu oublies pas le e accent aigue, accent grave, accent circonflexe par exemple ?
— Ah c’est pas con, oui c’est logique de les mettre là. Et puis t’as raison, pourquoi par mettre aussi le e majuscule.
Oui ou les e accentués en majuscule aussi
— Oh putain, ça complique les choses ça…
Tu commences à voir le problème. On a plein de tables de caractères qui dépendent de là où on est, et qui ne sont pas interopérables, et on a des langues dont l’ordre des caractères est différent de l’ordre de la table des caractères.
— Des langues dont ……… l’ordre des caractères ………. est différent…….. de l’ordre…… de la table………. de caractères. Ah oui c’est bon je l’ai. Elle est pas simple là. Mais du coup… c’est quoi la solution ?
Ce qui est marrant, c’est que pour la voir la solution, je vais parler d’un autre méta caractère, qui est le dollars. Quand je mets un dollars devant un mot, le shell va interpréter ça comme afficher la valeur de la variable dont le nom est le mot en question. Si j’écris $LANG, le shell va le remplacer par la valeur contenue dans la variable LANG.
— Et si y’a rien dans la variable ?
Ben il affiche rien.
— Oh y’a un truc dans LANG, il me dit fr_FR.UTF-8. Ah mais je connais ce truc UTF machin là
Il y a deux choses dans cette variable. Déjà le UTF-8 ça veut dire qu’on utilise la table de caractère UTF-8, et pas la table ASCII
— Du coup les caractères sont pas au même endroit que pour la table ASCII ?
Alors, pour les 128 premiers, si, comme ça il n’y a pas de soucis de compatibilité. Mais tous les autres, comme les accents, la tilde, le cyrillique ou le grec, c’est ailleurs. Et la table est beaucoup plus grande que la table ASCII, puisqu’elle comprend plus d’un million de caractères, et tout le monde peut l’utiliser.
— Ah ben du coup l’histoire drôle entre le français le grec et le turc, elle va fonctionner cette fois !
Oui, du coup tout le monde va voir les mêmes caractères. Et ils pourront même échanger des émojis !
— Ils sont dans la table UTF-8 aussi ?
Oui, car ils répondent à un vrai besoin. Qui est qu’une grande partie de la communication passe de façon non verbale entre des individus. C’est à dire que les grimaces, le sourire, la posture donnent un contexte aux mots. Et quand on ne fait qu’écrire, on perd ce contexte. Ça s’est vu assez tôt avec l’apparition des smiley où les gens ont naturellement trouvé une manière de faire passer leur contexte ou des émotions.
— Putain, j’avais pas vu ça sous cet angle ! Et le fr que tu as dans la variable, c’est pourquoi ?
Alors il y a plusieurs usage. Dans notre cas, c’est lui qui va dire que l’ordre dans lequel l’utilisateur va manipuler des caractères n’est pas l’ordre de la table des caractères. Et que notamment, entre le D et le F il y a les accents utilisés en français.
— Wow, du coup, chaque langue a son ordre propre en fait
À priori oui c’est ça. Et donc comme on est en français, entre a et z, on a des minuscules, des majuscules et des caractères accentués et autres spécifique à la langue et PAS à la table de caractères.
— Aaaah du coup, oui, je comprends, là mon a tiret z il veut pas dire la même chose en français ou en anglais…
Tout à fait. Et je pourrai même dire au système de reprendre l’ordre de la table ASCII d’origine, sans s’occuper de la langue en lui disant LANG=C
— C ? Pourquoi ?
Parce que ! Non mais juste qu’on ne met pas une langue, car même en anglais, entre D et F on a majuscule et minuscule, alors que dans la table de caractères, les majuscules et les minuscules sont séparées. C’est juste pour dire au système, ne t’occupe pas de la langue de l’utilisateur, utilise l’ordre des tables.
— C’est pas con quand même…
Non c’est bien vu même. Mais j’ai une question subsidiaire.
— Vas-y…
Dans LANG on a fr_FR. Ce qui veut dire le français dans sa variante française. Donc il y a d’autres variantes. Pourquoi on les différencie ?
— Heuuu, ben oui y’a le suisse, le belge, le canadien, et je pense qu’il y a aussi des pays d’Afrique là dedans ?
Oui tout. À fait. Mais. C’est quoi la différence avec le français de France ?
— alors là…. Ben le clavier ou l’heure peut être ?
Ça aurait pu, mais tu peux être en français avec un clavier allemand ou en belge avec l’heure américaine, c’est pas lié.
— Hum…. Mmm. L’accent ?
Oui c’est sur ton ordinateur va te dire « tabernacle t’a fait une erreur tsé ! »
— t’es con. Non je sais pas, vraiment. Ah siiii, les dates, la manière de les afficher !
Oui, oui. Par exemple oui. Mais t’as aussi l’affichage des nombres, en français on utilise la virgule comme séparateur décimal, et au Canada, c’est le point, la virgule étant pour le séparateur des milliers. Que nous n’avons pas, à ma connaissance. Et la devise est différente aussi.
— C’est génial ! Mais. Je ne vois pas la différence entre le français de France et le français de Belgique du coup.
Ben pour tout te dire… Moi non plus ! Quand on était avec le franc oui, car on avait une différence entre le franc français et le franc belge, mais avec l’euro… aucune idée ! D’ailleurs, si l’un d’entre vous voit cette différence, donnez la dans les commentaires de la vidéo, je suis curieux de la connaître !
En tous si ça vous a plu, vous connaissez la chanson, le pouce, l’abonnement, la cloche, et le partage sur les réseaux sociaux. Vraiment ce dernier c’est ce qui aide le plus la chaîne, la faire connaître.
Et moi je vous dit à la prochaine !
Ciao les geeks