Encodage caractère : bizzareries (suite)

Le
p.brie
Bonjour,

Je reprends des éléments de la discussion de jeudi : "Encodage
caractère : bizzareries". merci à tous ceux qui m'ont apportés leurs
connaissances.

C'est un peu long pour arriver à la question, mais je souhaitais faire
un résumé des épisodes précédents.

Question initiale : soit le code suivant

==
==
=
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1" />
<title>Essai</title>
</head>

<body>
<p> C'est 15 &euro;</p>
</body>
</html>
==
==
==
Affichage

C'est 15 EURO (sigle de l'euro)


Même source mais on se place en ISO 8859-15
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-15" />

J'utilise donc ISO-8859-15 qui permet entre autres pour pouvoir gérer
des caractères comme EURO qui ne faisaient pas partie de ISO 8859-1

Affichage
C'est 15 (suivi d'un carré)
Bref tout le contraire que ce que je pensais une idée ?

==
==


La réponse d'olivier Miakinen m'a paru la plus didactique (merci à
tous les autres)


Pour comprendre ce qui se passe, il faut avoir une idée de ce qui se
passe aux positions 80 et A4 (hexa) dans les tables ISO-8859-1,
ISO-8859-15 et CP1252. Ce que j'appelle << position dans une table >>
c'est << quel caractère sera affiché si j'envoie un octet qui a cette
valeur en déclarant utiliser cette table >>.

Voir http://www.miakinen.net/vrac/charsets/ pour y voir plus clair.

Ainsi, un octet de valeur 41 hexa affichera un << A >> dans les trois
tables (ISO-8859-1, ISO-8859-15 et CP1252), ainsi d'ailleurs que dans
*toutes* les tables qui sont basées sur US-ASCII.

Un octet de valeur A4 affichera un ¤ dans ISO-8859-1 et dans CP1252,
mais un EURO dans ISO-8859-15.


Un octet de valeur 80 affichera un EURO dans CP1252, et *en principe* il
ne devrait rien afficher dans ISO-8859-1 et ISO-8859-15. Pourtant, *en
pratique*, de nombreux navigateurs et courrielleurs trouvent sympa de
faire comme si ISO-8859-1 était identique à CP1252 : ils affichent
donc un EURO dans ISO-8859-1, et rien (ou un carré vide, ou un point
d'interrogation) dans ISO-8859-15.


Voilà, le décor est planté. Maintenant voyons ce qui s'est passé sur=

ta page. Tu es en ISO-8859-1, et tu as voulu coder un EURO. Comme ton
éditeur fonctionne en CP1252, il a mis un octet valant 80. Quand tu
relis la page avec un navigateur qui est lui-même assez coulant, il a
bien vu que tu es soi-disant en ISO-8859-1, mais puisque le caractère
80 n'y existe pas alors qu'il vaut un EURO en CP1252, il a la
gentillesse de t'afficher un EURO.

Si maintenant tu changes de charset sans rien changer d'autre, le
navigateur sera moins sympa (ou plus rigoureux) et il ne t'affichera
rien.

Voilà. Ai-je été suffisamment clair ?

==
==


Olivier tu as été très très clair mais cela ammène une autre quest=
ion.

Je travaille sous windows XP.

En gros ce que tu m'annonce c'est que mon navigateur (que ce soit IE
ou Firefox d'ailleurs) cherchent eux mêmes ce qu'ils pourraient
afficher quand ils n'ont rien à afficher (cas du caractère 0x80).

Donc si je developpe un site et que je ne fais pas gaffe, je peux donc
croire que tout va bien alors qu'en fait "ça merdoie".

Question 1 :
Comment être sûr que mon Navigateur respecte bien le charset qu'il
trouve sur la page Web sans chercher à essayer d'optimiser ?

Question 2 :
Puis je utiliser sous Windows un éditeur de texte qui me code dans le
charset voulu et non en CP1252 ? (Question subsidiaire par ce que
c'est mon éditeur préféré, notepad ++ est il capable de faire cela ?=


Merci
Patrice
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #22028731
Le 03/12/2007 10:02, a écrit :

Je reprends des éléments de la discussion de jeudi : "Encodage
caractère : bizzareries". merci à tous ceux qui m'ont apportés leurs
connaissances.



Note que tu aurais pu répondre dans le même fil, ou alors corriger
« bizzarerie » et « bizarrerie » (mais la première solution était à
mon avis préférable malgré la coquille).

Question initiale : soit le code suivant

[...]
charset=ISO-8859-1" />
[...]
<p> C'est 15 &euro;</p>
[...]
Affichage
C'est 15 EURO (sigle de l'euro)

Même source mais on se place en ISO 8859-15
[...]
Affichage
C'est 15 (suivi d'un carré)



Ce n'était pas la question initiale.

Dans la question initiale, tu avais ceci dans le code :
C'est 15 ¤
C'est 15 &euros;
Cela t'affichait ceci en ISO-8859-1 :
C'est 15 ¤
C'est 15 ¤
Et cela en ISO-8859-15 :
C'est 15 (suivi d'un carré)
C'est 15 ¤

Ce comportement est normal, car ton code contient un octet valant 80 en
hexa, code de l'¤ en CP1252, et que ton navigateur croit bien faire en
interprétant ta déclaration de charset « ISO-8859-1 » comme si c'était
« Windows-1252 » ou « CP1252 ». Quand tu déclares ISO-8859-15, il sait
que cette supposition est fausse et affiche un carré vide qui signifie
« caractère inconnu ».

======================================================= >
Olivier tu as été très très clair mais cela ammène une autre question.



Je ne l'étais peut-être pas assez, du coup. ;-)

Je travaille sous windows XP.

En gros ce que tu m'annonce c'est que mon navigateur (que ce soit IE
ou Firefox d'ailleurs) cherchent eux mêmes ce qu'ils pourraient
afficher quand ils n'ont rien à afficher (cas du caractère 0x80).



En fait l'algo me semble être le suivant :
- si l'utilisateur a déclaré CP1252 ou ISO Latin1, on utilise CP1252
qui est un surensemble de l'autre ;
- sinon on utilise ce qui est déclaré.

Donc si je developpe un site et que je ne fais pas gaffe, je peux donc
croire que tout va bien alors qu'en fait "ça merdoie".

Question 1 :
Comment être sûr que mon Navigateur respecte bien le charset qu'il
trouve sur la page Web sans chercher à essayer d'optimiser ?



Assure-toi que la page web est correcte, auquel cas le navigateur ne
cherchera pas à rattraper les erreurs puisqu'il n'y en aura pas :
http://validator.w3.org/

Pendant que j'y suis, note que ta page ne sera jamais 100 % correcte
si tu essayes de faire passer du XHTML pour du "text/html".

Voir http://pgoiffon.free.fr/info/inet/html_ou_xhtml.php

Question 2 :
Puis je utiliser sous Windows un éditeur de texte qui me code dans le
charset voulu et non en CP1252 ? (Question subsidiaire par ce que
c'est mon éditeur préféré, notepad ++ est il capable de faire cela ?



En fait, il te suffit d'éviter de saisir les caractères en bleu ou en
jaune de trouvent sur les lignes 80 et 90). Tous les autres sont bons.

Un autre moyen consiste à faire tes nouvelles pages en UTF-8 ou en
ISO-8859-15 si ton éditeur le permet (mais je ne suis pas compétent
pour te parler de ce que permet ou non Notepad++)
Publicité
Poster une réponse
Anonyme