L'encodage des caractères
EVALUATION DU PROJET
Nous estimons à une cinquantaine d'heures de travail le
temps de réalisation de ce projet, compte tenu du partage des tâches
entre les membres du groupe. La répartition de ce temps travaillé sur
le semestre a été principalement concentré au moment des problèmes de
conversion d'encodages et de réalisation du site. Nous dirions donc que
le gros des efforts a été fourni dans le dernier tiers du projet. En
particulier pour les personnes n'étant pas familières avec l'écriture
de pages html, peut-être aurait-il été judicieux d'occuper le début du
projet avec une première ébauche de site.
Grâce au découpage et à l'avancée
progressive dans l'écriture du
script, nous sommes arrivés à un résultat qui, au début du semestre,
nous apparaissait bien ambitieux. Cependant, nous nous sommes aperçus,
après plusieurs exécutions du script que les résultats obtenus
n'étaient pas toujours consistants. En particulier, notre script nous
permettait de rentrer à la main l'encodage d'une page aspirée lorsque
celui-ci n'avait pas été repéré automatiquement et nous avons remarqué
que les pages pour lesquelles cette information était demandée
différaient d'une exécution à l'autre, pour des raisons que nous
n'avons pas réussi à élucider. De plus, le temps d'aspiration des pages
pouvait être particulièrement long voire l'aspiration pouvait échouer
ce qui obligeait alors à relancer l'exécution depuis le début.
Nous avons rencontré des difficultés liées à la non portabilité des scripts d'un système d'exploitation à l'autre (Mac, Linux et Windows) puisque chaque membre du groupe utilisait un système différent.
Le bash permet d'automatiser relativement simplement des tâches une
fois les notions de chemin relatif, de variables et de boucles
comprises et la syntaxe que requiert le système qu'on utilise acquise.
Mais comme ce langage offre un énorme éventail de commandes assorties
d'options, il est souvent nécessaire de passer du temps à consulter les
manuels. Nous nous sommes également rendu compte que certaines
commandes (file, curl) ne fournissait pas de résultats fiables.
DIFFICULTE RENCONTREE : L'ENCODAGE DES CARACTERES
De part le choix de nos langues (arabe, chinois, coréen), nous avons été particulièrement sensibilisés au problème d'encodage des caractères, sujet dont nous avons amplement entendu parler pendant le semestre au cours de Gestion informatique du multilinguisme.
Au vu des nombreuses embûches liées à ces problèmes d'encodage et que nous avons rencontrées durant le projet, il nous a semblé utile de faire une synthèse des connaissances à avoir sur le sujet et de proposer des solutions ou du moins des pistes de réflexion.
Ce qu'il faut garder en mémoire, c'est que la visualisation d'un fichier repose sur une interprétation de la suite d'octets contenus dans ce fichier.
Avant Unicode, la correspondance entre caractère et information binaire se faisait principalement à l'aide des tables 8 bits qui à un caractère associait une valeur comprise entre 0 et 255. Il existe une multitude de ces tables qui ont été élaborées au gré des besoins des utilisateurs ou bien en fonction des rivalités culturelles et politiques. Ainsi la famille des codes normalisée sous le nom d'ISO-8859 permettent de coder les langues latines, le grec, le cyrillique, l'arabe, l'hébreu, etc.
Dans le cas du coréen et du chinois, il s'agit de tables 16 bits ou de longueur variable (ex: EUC-KR pour le coréen, GB2312 pour le chinois).
Unicode entend par caractère
l'association d'un code (en anglais code
point) et d'un nom (ex: latin capital letter I with dot
above) mais ne
définit aucun glyphe.
Nous ne donnerons pas plus de détail sur le sujet mais tout le cours
sur
Unicode est accessible dans le lien suivant: Cours
sur Unicode de Jean-François Perrot
Cependant l'utilisation d'UNICODE sur le web est loin d'avoir atteint le degré d'uniformisation souhaitée et dans le cadre de notre projet qui nécessitait la concaténation de pages html aux encodages hétérogènes, l'étape de conversion de ces pages en UTF-8 était indispensable mais a soulevé de nombreux problèmes.
On pourrait penser que cette tâche est simple à réaliser puisqu'il existe une commande shell, iconv, qui permet de convertir un fichier d'un encodage source vers un encodage cible. Mais il est nécessaire de fournir explicitement à la commande l'encodage source.
La commande shell file
avec l'option -i (ou -I sur Mac)
prend en argument le nom d'un fichier et renvoie son encodage mais nous
avons
constaté que cette commande, pour des raisons qui nous sont inconnues,
ne
fournit pas toujours l'information correcte.
Exemple
d'une page en arabe (arabe5.html) encodée en windows-1256 (ce
qu'indique le code source) mais dont file trouve comme en encodage
iso-8859-1 (iso latin 1) !
D'autre part, une page html bien écrite devrait contenir dans une balise meta l'information relative à l'encodage. Celle-ci se trouve généralement au niveau de l'attribut charset, lorsqu'elle est dans une balise meta, ou encoding, lorsqu'elle figure au tout début du document sous forme de déclaration XML (on peut constater ici la confusion terminologique décrite ci-dessus). Ainsi nous avons tenté de filtrer cette information à l'aide de la commande egrep et de la liste des encodages attendus. Seulement, il est arrivé que cette information ne figure pas dans le code source de la page ou bien qu'elle soit erronée (charset annoncé différent de celui effectivement utilisé). Dans ce cas, il est possible de s'aider de l'information que donne le navigateur sur l'encodage qu'il a détecté mais là non plus, la détection n'est pas fiable à 100%.
En résumé, nous pouvons donner quelques règles utiles à garder en mémoire lorsque l'on a à faire à ces problèmes d'encodage:
- utiliser UTF-8 permet d'avoir le jeu le plus large possible de caractères et permet donc de mélanger les langues dans un même document sans problème de rendu.
- "l'encodage se produit au moment
d'enregistrer le
fichier" (W3C Québec). Pour être correcte, la déclaration, par exemple
d'une page html, doit correspondre à celle qui a réellement été
utilisée dans
l'éditeur de texte qui a servi à la saisie du code source.
- "il ne suffit pas de changer la déclaration d'encodage pour qu'un
changement d'encodage se produise."(W3C Québec)
- "les éditeurs de texte ne sont pas également fiables en matière d'encodage et de changement d'encodage."(W3C Québec). Pour les éditeurs de texte basiques tels que Bloc Notes ou TextEdit l'information encodage d'un fichier n'est pas directement accessible. De plus lorsque l'on écrit du code html dans ces éditeurs, l'indication d'encodage fournie en en-tête ou dans la balise meta n'est pas vérifiée par l'éditeur et peut donc différer de l'encodage réellement utilisé par le programmeur lors de la saisie si celui-ci n'y a pas porté attention.