Accents de HTML à MySQL

  • Créateur du sujet Créateur du sujet NeoJF
  • Date de début Date de début

NeoJF

Membre actif
1 Novembre 2000
485
6
40
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 ;)
 
Si quelqu'un a une solution ça m'interesse ... j'avoue que je m'arrache régulièrement les cheveux avec des problèmes d'encodages de texte (que ce soit pour du jsp ou du php .. et que je finis toujours pas tout passer en latin1 + caractères spéciaux html).

@+

Guillaume
 
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.
 
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 !
 
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.