Encodage caractère - Java - Programmation
Marsh Posté le 11-02-2011 à 12:18:57
liouan a écrit : Salut, |
Donc tu as un formulaire en unicode, un jboss en "on ne sait pas" et une base idem.
Si tu veux faire de la gestion de l'encoding (par exemple si tu veux gérer du grec ou de l'arabe),
la manière fiable c'est de gérer de bout en bout, gérer l'encodage à tous les niveaux.
Et un sgbd à un encodage ... on le régle à la création du sgbd .
Même java à un encodage, dès que tu fais un 'read', 'write' ... l'encodage par défaut est pris,
à moins que tu ne surcharges .
Si tu veux te limiter à un jeu de caractère 'francais', il faut que ta jsp soit en iso latin 1,
ton jboss soit en iso latin 1 (c'est la valeur par défaut) et ta base de données aussi
(et je parie que ta base de données est en iso latin 1 par défaut).
iso latin 1 : pour la france
iso latin 6 : arabe
unicode : la plupart des alphabets de la planète
Si tu veux être compatible "multi alphabets", prens de l'uftf8,
- au niveau du jsp, tu as trouvé la balise qui va bien
- au niveau de jboss ... ajoutes cela dans le .sh ou .bat de démarrage
set JAVA_OPTS=-Dfile.encoding=UTF-8 %JAVA_OPTS%
- le sgbd doit être en utf-8 et elle ne l'est certainement pas.
attention un sgbd en unicode prend plus d'espace disque (x2 environ)
Le but c'est :
Si tu as cela, il y a des chances que tu sois blindé ...
Pour vérifier dans la base tes chaines de carac insérées,
je recommande un client unicode, un client jdbc fait cela.
squirrel par exemple ...
L'étape suivante c'est de mettre des chaines utf-8 dans les fichiers properties :-)
Puisque tu vas apparememnt faire de l'utf-8
Marsh Posté le 11-02-2011 à 15:20:27
Au niveau de la base de données, c'était bon. Elle était déjà réglée en UTF-8.
Par contre, au niveau JBoss, par défaut, il décode toutes les chaînes comme si elles étaient encodées en ISO-8859-1.
J'ai donc mis un filtre en première position, qui a pour seul but de régler correctement l'encoding dans le doFilter(...):
req.setCharacterEncoding("UTF-8" );
resp.setContentType("text/html;charset=UTF-8" );
Marsh Posté le 11-02-2011 à 15:52:08
liouan a écrit : Au niveau de la base de données, c'était bon. Elle était déjà réglée en UTF-8. |
Pour ma part j'ai fait un retour de mon expérience JSP -> Struts -> Jboss 4 -> Informix. C'était il y a ... 4 ans.
La seule solution que j'avais trouvé était de changer l'encodage au niveau des paramètres java (le -D encoding)
et Jboss avait pris en compte.
Marsh Posté le 10-02-2011 à 16:31:12
Salut,
J'ai le problème le plus classique qui soit: un problème d'encoding de caractères. Et pourtant, je n'arrive pas à comprendre où se produit l'erreur.
Ma JSP est encodée en UTF-8, elle contient un formulaire dans lequel je rentre des valeurs avec des accents.
l'en-tête du code HTML généré contient:
(vérifié avec ctrl+u sous Firefox)
Toujours sur Firefox, si je vais dans "Affichage -> Encodage des caractères", c'est bien UTF-8 qui est sélectionné/
Dans le formulaire, je rentre le mot "ajouté", puis je submit.
Avec firebug, je vois que le contenu envoyé (en post) est
Du coté du serveur d'application (un JBoss), un System.out.println de la variable me donne:
et dans la base de données, la valeur insérée est
Par contre, si je force l'affichage de la page en ISO-8859-1 avant de soumettre le formulaire, les accents passent correctement.
Avez-vous une idée de là ou se situe le problème?
Pour l'instant, je trouve que "regle.nom=ajout%C3%A9" est correct (il me semble que l'encoding de "é" est bien "%C3%A9" en UTF-8, mais c'est comme si le serveur essayait de lire la valeur comme de l'ISO-8859-1...
Au passage, si quelqu'un connait bien JBoss et pouvait me dire s'il y a quelque chose à régler...
Note: j'utilise aussi le framework Struts²... peut-être qu'il y a aussi une couche là dedans...
Note: Non, je ne suis pas un frusté de l'encoding de caractères