Accents de HTML à MySQL

NeoJF

Membre confirmé
1 Novembre 2000
485
6
36
1 chance sur 10 comme toi !
rch.web.free.fr
Bonjour.

Je développe une plateforme web en JSP, tournant sur mon Mac sous MacOS X 10.3.7 avec Tomcat 5.5.7. J'ai un serveur MySQL (version 4.0.21) tournant également sur le même ordinateur.

Ma plateforme permet à l'utilisateur d'envoyer un message qui doit être stocké sur la base MySQL. C'est là qu'est le problème. En effet, tout fonctionne parfaitement jusqu'à ce que l'utilisateur entre un texte avec des accents. La base n'enregistre à la place des lettres que des points d'interrogation. Il en est de même ensuite à l'affichage.

Je ne comprends pas du tout comment la base interprête les messages qui lui sont envoyés. Le problème est qu'il se peut qu'il y ait des transformations effectuées par le driver JDBC. En effet, dans le terminal, je peux taper un 'é', qui apparaitra sous la forme \303\251 qui représente la séquence des 2 octets en octal du code Unicode correspondant. La base interprête bien un 'é'. J'ai donc essayé de passer mes pages en UTF-8. Là, non seulement la base ne marche plus, mais l'interprétation par le navigateur web des pages fait défaut. J'ai en effet un problème très bizzare : si je choisis manuellement encodage UTF sur la page du formulaire, que j'envoi un 'é', et que je choisis ensuite manuellement UTF sur la page affichant le résultat (la base n'intervient pas au milieu, juste une récupération du paramêtre par un bean), tout fonctionne. Maintenant, si les pages spécifient le format UTF, la page affichant le résultat va afficher les 2 caractères correspondant aux deux octets du code unicode du 'é' comme si elle s'affichait en ISO-8xxx-1 (désolé, j'ai pas le code en tête...).

Si quelqu'un maîtrise ce genre de choses, ça m'intéresserait vraiment. J'ai éventuellement la solution d'utiliser l'encodage latin-1 (le ISO-8xxx-1) et de faire la conversion en codes HTML avant d'écrire dans la base, ce qui aura l'avantage de bien fonctionner sur le site, mais l'inconvénient d'alourdir le stockage dans la base avec du code html inutile.

Merci d'avance ;)
 

SuperCed

Membre d’élite
Club MacG
20 Juin 2001
1 173
50
41
superced.rb38.eu
Perso, je mets tout en utf-8, comma ça, pas de problème.

Dans ta pages html ou xhtml, tu peux décrire au début la façon dont tu encodes les caractères. de la meme façon, sous mysql, tu peux définir le type d'encodage.
Le tout est d'être consistant.
 

NeoJF

Membre confirmé
1 Novembre 2000
485
6
36
1 chance sur 10 comme toi !
rch.web.free.fr
Moi aussi je voulais mettre tout en UTF-8.
Seulement là j'ai eu un truc vraiment bizarre :
Supposons que j'ai spécifié un encodage Latin-1. Je passe l'encodage en UTF-8 manuellement dans Safari sur une page de formulaire, je saisis mon 'é', je valide. J'arrive sur la page cible qui affiche le résultat récupéré par un bean. Là, je reforce l'affichage en UTF-8, je vois bien un 'é'.
Maintenant, si je passe dans le code de mes pages la spec jsp que c'est du UTF-8, je refais la même chose (donc sans forcer l'encodage en UTF-8 puisque Safari le détecte normalement tout seul), et là dans l'affichage du résultat je n'ai plus un 'é' mais les 2 caractères qui forment le code du 'é' en UTF-8 ! La même chose se produit dans FireFox.

Donc sans solution je ne peux pas utiliser l'UTF-8...
Quelqu'un sais d'où vient ce problème ?

Merci !
 

SuperCed

Membre d’élite
Club MacG
20 Juin 2001
1 173
50
41
superced.rb38.eu
NeoJF a dit:
Moi aussi je voulais mettre tout en UTF-8.
Seulement là j'ai eu un truc vraiment bizarre :
Supposons que j'ai spécifié un encodage Latin-1. Je passe l'encodage en UTF-8 manuellement dans Safari sur une page de formulaire, je saisis mon 'é', je valide. J'arrive sur la page cible qui affiche le résultat récupéré par un bean. Là, je reforce l'affichage en UTF-8, je vois bien un 'é'.
Maintenant, si je passe dans le code de mes pages la spec jsp que c'est du UTF-8, je refais la même chose (donc sans forcer l'encodage en UTF-8 puisque Safari le détecte normalement tout seul), et là dans l'affichage du résultat je n'ai plus un 'é' mais les 2 caractères qui forment le code du 'é' en UTF-8 ! La même chose se produit dans FireFox.

Donc sans solution je ne peux pas utiliser l'UTF-8...
Quelqu'un sais d'où vient ce problème ?

Merci !

Il semble que tu aies tout simplement oublié de mettre ça :
Bloc de code:
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />
[/quote]
dans le head.

Moi j'ai jamais eu un seul problème et ceci quelque soit le navigateur.