Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1868 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Encodage caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Encodage caractère

n°2055878
liouan
Posté le 10-02-2011 à 16:31:12  profilanswer
 

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:

Code :
  1. <meta http-equiv="content-type" content="text/html; charset=utf-8" />


(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  
 

Code :
  1. regle.nom=ajout%C3%A9


 
Du coté du serveur d'application (un JBoss), un System.out.println de la variable me donne:

Code :
  1. ajouté


 
et dans la base de données, la valeur insérée est  

Code :
  1. ajouté


 
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&eacute; de l'encoding de caract&egrave;res

mood
Publicité
Posté le 10-02-2011 à 16:31:12  profilanswer
 

n°2056067
willy le k​id
Posté le 11-02-2011 à 12:18:57  profilanswer
 

liouan a écrit :

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


 
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 :

  • tu vois la bonne chaine dans le formulaire jsp de création modification
  • la même chaîne dans le form jsp d'édition  
  • et surtout la même chaîne dans la table du sgbd

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
 
 
 
 

n°2056140
liouan
Posté le 11-02-2011 à 15:20:27  profilanswer
 

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" );

n°2056151
willy le k​id
Posté le 11-02-2011 à 15:52:08  profilanswer
 

liouan a écrit :

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" );


 
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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Encodage caractère

 

Sujets relatifs
caractère qui ne passe pas (pb encodage ?)Problème bizarre encodage caractère
[MySQL] encodage de caractère log windowsHanzi, encodage UTF8: Créer un caractère à partir de son code unicode
problème encodage caractére avec htmlspecialchars()problème encodage caractére
[RÉSOLU]encodage automatique du caractère "&" en "&amp;" dans les JSP[résolu]Encodage de caractère
incompatibilité d'encodage de caractèreprobleme d'encodage sur un caractere
Plus de sujets relatifs à : Encodage caractère


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR