Joc de caràcters dels documents HTML¶
Suposo que haureu notat que, fins a l'escriptura d'aquest document (9 de juny del 2006), els diacrítics dels documents HTML a DDD es veien en general malament.
Us explico el motiu, les possibles solucions i com he preferit arreglar-ho.
El motiu¶
Els documents HTML poden estar escrits en diferents jocs de caràcters (ex., ISO-8859-1 àlias Latin1, CP-1252 àlias windows-1252, UTF-8 àlias Unicode, etc). El servidor de Web ha d'informar al navegador del joc de caràcters del document, perquè el navegador el pugui mostrar correctament. Això es pot fer a dos nivells:
1. L'administrador del servidor Web pot definir-ho a la caçalera HTTP, p.ex:
HTTP/1.1 200 OK
Date: Fri, 09 Jun 2006 08:05:51 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Fri, 23 Dec 2005 11:51:03 GMT
ETag: "2d6c509-30a-a1b537c0"
Accept-Ranges: bytes
Content-Length: 778
Connection: close
Content-Type: text/html; charset=ISO-8859-1
2. En una etiqueta META dins d'un document HTML, p. ex:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Tradicionalment, en el món occidental, s'ha considerat que el valor per defecte és el ISO-8859-1; tan és així, que sovint en en nostre entorn més immediat, bona part dels servidors de Web ni els documents servits declaren que estan en ISO-8859-1 (o -15, amb l'euro).
En general, la política correcta seria que el servidor de Web declarés el joc de caràcters predeterminat, i els documents ho confirmessin. En cas de discrepància, el navegador ha de fer cas del que diu el document.
Configuració del DDD¶
CDSware és una aplicació Unicode que utilitza UTF-8 [http://en.wikipedia.org/wiki/Utf-8] com a joc de caràcters predeterminat. Això ho declara explícitament el servidor de Web a les caçaleres HTTP:
HTTP/1.1 200 OK
Date: Fri, 09 Jun 2006 08:18:25 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) mod_python/3.1.3 Python/2.3.5
Set-Cookie: CDSSESSION=AB7F6F81B46AA227; path=/
Connection: close
Content-Type: text/html; charset=UTF-8
I, a més, ho confirma a les pàgines HTML generades per l'aplicació:
<head>
<title>Dipòsit Digital de Documents de la UAB - Servei de Biblioteques: Pàgina inicial</title>
<link rev="made" href="mailto:ddd.bib@uab.es">
<link rel="stylesheet" href="http://ddd.uab.es/img/cds.css&quot;>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta [[[[name]]]]="description" content="ddd - ddd">
<meta [[[[name]]]]="keywords" content="ddd, CDSware, ddd">
</head>
Els documents HTML servits per DDD¶
La majoria dels documents HTML que heu estat recollint i penjant de DDD no informen, via ``meta http-equiv``, del seu joc de caràcters, suposant que el servidor ja ho faria o que el navegador ho entendria bé. I, en general, això havia funcionat bé fins que els heu copiat a DDD. Aleshores, els navegadors fan cas de la caçalera HTTP (que diu que el joc de caràcters és UTF-8) i es veu malament.
Incidentalment, aquest wiki també està en Unicode UTF-8, i també informa tant a la capçalera HTTP com en els documents. Podeu veure què passa quan el navegador no reconeix bé el joc de caràcters fent la següent operació en el Firefox: al menú Visualitza, opció Codificació de caràcters, canvieu el valor actual, és a dir, ``Unicode (UTF-8)``, per qualsevol altre. Podeu fer l'operació inversa en, p. ex., la Web de la UAB, i veureu exactament els problemes dels documents HTML en DDD fins ahir.
Possibles solucions¶
D'entrada se'm van ocórrer 3:
1. Convertir el joc de caràcters dels documents ISO-8859-1 a UTF-8. És una solució en principi fàcil i automatitzable, però que pot donar sorpreses si algun dels documents no és ISO-8859-1. També té l'inconvenient que s'altera el fitxer pròpiament dit.
1. Afegir un ``meta http-equiv`` als documents confirmant que són ISO-8859-1. És més difícil d'automatitzar, i també s'altera el fitxer pròpiament dit.
1. Configurar el servidor de Web (Apache2, en el nostre cas) i que avisi que els fitxers que estan sota els directoris ``/pub`` i ``/uab`` són en ISO-8859-1. És una solució que no altera els documents, i que en general funciona. Pot fallar si algun dels documents HTML estigui codificat en un altre joc de caràcters (ex., UTF-8) i no estigui informat en el ``meta http-equiv``. De moment no n'hem trobat cap. És una solució relativament fàcil d'aplicar (en Apache2, al menys).
De moment, doncs, he optat per la solució 3, degut a la seva simplicitat. Si convé podem reavaluar-ho dintre d'un temps o quan ens trobem amb excepcions.
Annex¶
Aquesta problemàtica no afecta als documents PDF, que tenen la seva pròpia manera de codificar el joc de caràcters.
Actualitzat per fa més de 17 anys · 0 revisions