Envoyé par : servlet1
Date : 23/03/2006 16:16
Je suis entrtein de déveloper une app Xul et Java (servlet..) et XmlhttpRequest ...Mon prb c avec les caractères spéciaux (é,è,â...) les caractères spéciaux (particulièrement les accents) ne sont pas enregistrer ds ma base Mysql avec le bon encodage.?!!! exemple école devient écoleé
Explication : j'ai un formulaire Xul avec 2 Zone de Text et button ki va m'ajoute une ligne ds la base biensur ( c la servlet)
public class TestCaract extends HttpServlet { private static final long serialVersionUID = 1L;
public void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { PrintWriter out = resp.getWriter(); resp.setContentType("text/html"); String P=req.getParameter("p"); String P2=req.getParameter("p2"); out.println(P); Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); Task util1; util1 = (Task) session.load(Task.class, new Integer (Integer.parseInt("2"))); util1.setTitle(P); util1.setProjet(P2); tx.commit(); HibernateUtil.closeSession(); } catch (java.lang.Exception ex) { PrintWriter out = resp.getWriter(); resp.setContentType("text/xml"); while (ex != null) { out.println ("SQL Exception: " + ex.getMessage ()); } // end while
}
} }
Merci d'avance !!!
Envoyé par : laurentj
Date : 23/03/2006 16:27
à toi de bien spécifier
Et bien sûr, si tu as une servlet qui renvoi le contenu de la base, qu'elle renvoi avec convertion si necessaire.
Bref, en clair : à toi de bien vérifier, tout le long de la chaine (client<->serveur<->base de donnée), si les charset sont les mêmes, et le cas échéant, effectuer les convertions au bon moment.
Envoyé par : Zéf
Date : 23/03/2006 18:10
Pour ton cas précis, je pense que ton formulaire XUL est en UTF-8 ; donc les données arrivent au serveur en UTF-8.
Ta base est à mon avis en ISO (le é correspond au "é" UTF-8 vu en ISO)
Tu as donc le choix présentement entre :
N.B. Si jamais ta base est en UTF-8, c'est que quelque part tu ré-encodes en UTF-8 une chaîne suposée être en ISO et qui est déja au bon format.
Bon courage,
Z.
Envoyé par : servlet1
Date : 23/03/2006 19:45
bien voila mon fich xul :
<?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="../css/main.css" type="text/css"?> <?xml-stylesheet href="closetab.css" type="text/css"?> <window title="t3h Mail3r" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="reloadTree('4')" > <script src="../js/controle_formul.js"/> <script src="../js/load_tree.js"/> <commandset> <command id="butactual" oncommand="reloadTree('4');"/> </commandset> <deck selectedIndex="2" flex="1" id="mydeck"> <description value="Ceci est la première page "/> <vbox flex="1" > <vbox flex="1" style="overflow: auto" align="" > <hbox align="center"><label value=" " width="90" align="left"/></hbox> <hbox align="center"><label value=" " width="90" align="left"/> </hbox> <hbox align="center"> <label value=" ID:" width="90" align="right"/> <textbox id="txtidtask" readonly="true" value="" size="19" width="300"/> </hbox> <hbox align="center"> <label value=" DATE:" width="90" align="left"/> <textbox id="txtdatetask" focused="true" value="2006-03-10" maxlength="10" width="300" /> </hbox> <hbox align="center"> <label value=" PRIORITE:" width="90" align="center"/> <textbox id="txtpriorite" value="2005-07-jj" maxlength="1" width="300" />
et la function javascript pour lancer la servlet de Maj ds la base :
function maj(){ var _stat=0; var myvar=false; //verifier formulaire if (ok== 0) { return; } //confirmer test = confirm('Etes vous sûr de bien vouloir Mettre-à-jour la base'); if (test== false) { return; } Okoper=document.getElementById('txtoperat').value; var urlquery="/ProjtMadina/TestCaract2"; txtidtask=document.getElementById('txtidtask').value; txtdatetask=document.getElementById('txtdatetask').value; txtpriorite=document.getElementById('txtpriorite').value; cmbprojet=document.getElementById('cmbprojet').label; cmbexecuteur=document.getElementById('cmbexecuteur').label; cmbsuivi=document.getElementById('cmbsuivi').label; cmbmanag=document.getElementById('cmbmanag').label; txttitile=document.getElementById('txttitile').value; txtdescript=document.getElementById('txtdescript').value; if(txtdescript==''){txtdescript='----------'}; if(txtpriorite==''){txtdescript='0'}; for (var i=1; i<=4; i++){ if(document.getElementById('chekstat'+i).checked==true){ _stat=_stat+1; } } /*urlquery=urlquery + "&txtidtask=" + txtidtask + "&txtdatetask=" + txtdatetask + "&txtpriorite=" + txtpriorite + "&cmbprojet=" + cmbprojet ; urlquery=urlquery + "&cmbexecuteur=" + cmbexecuteur + "&cmbsuivi=" + cmbsuivi + "&cmbmanag=" + cmbmanag + "&txttitile=" + txttitile ; urlquery=urlquery + "&txtdescript=" + txtdescript + "&chekstat1=" + _stat ;*/ //switch(parseInt(document.getElementById('txtoperat').value)) { alert('test'); var xhr_object = null; xhr_object = new XMLHttpRequest(); xhr_object.open("Get", urlquery , true); xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) eval(xhr_object.responseText); } xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); var data = "Okoper="+Okoper+"&p=aa&p2=bb"; xhr_object.send(data); alert(data); //reloadTree('4'); if(Okoper==1){ reloadTree('4'); } }
Envoyé par : servlet1
Date : 23/03/2006 19:47
tu me passer un petit exemple j'ai pas bien compris Zéf ?!!! et Merci d'avance
Envoyé par : servlet1
Date : 23/03/2006 20:05
laurentj
je préfére la première :
lors de l'envoi, le charset dans lequel tu veux que ta servlet reçoive le contenu
Mais j'ai po bien compris comment ?!! N.b ca marche avec un formulaire html Merci
Envoyé par : laurentj
Date : 24/03/2006 10:57
1) s'il te plait servlet1 : fait pas des copier coller sauvage comme ça. Y a une syntaxe wiki pour que l'affichage soit propre. Merci de la respecter, et de faire des prévisualisations avant envoi. Ça devient lourd à corriger tes messages (cette remarque est valable pour d'autres d'ailleurs ;-) )
2) tu indiques le charset dans le content type :
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=iso-8859-1");
Si tu as toujours ces problèmes d'encodage : regarde du coté de java, pour savoir si il respecte l'encodage reçu, essaye de voir avec des fonctions de convertions de charset (désolé, je ne connais pas assez Java pour te dire où trouver ces fonctions).
Je me demande aussi si lorsqu'on récupère les valeurs des champs en Javascript, on les récupère pas en utf-8 quelque soit le charset de la page. À verifier.
3) Une dernière chose : tu as un bug. Tu envoi les données selon la methode POST (application/x-www-form-urlencoded et données dans le corps de la requete), mais tu indiques que tu envoi en GET. pas logique ;-)
Envoyé par : Zéf
Date : 25/03/2006 00:08
(au passage un bug du forum, j'ai pas pu "citer" ton message)
Je me demande aussi si lorsqu'on récupère les valeurs des champs en Javascript, on les récupère pas en utf-8 quelque soit le charset de la page. À verifier.
Je dirai plutôt l'inverse (cf ma question existentielle toujours en suspend :) )
Le submit respecte bien l'encodage de la page, mais le JS semble travailler en ISO uniquement.
A vérifier aussi
Z.
Envoyé par : servlet1
Date : 25/03/2006 16:15
" Si tu as toujours ces problèmes d'encodage : regarde du coté de java, pour savoir si il respecte l'encodage reçu, "
String encoding = req.getCharacterEncoding(); if (encoding == null || !encoding.equals("UTF-8")){ req.setCharacterEncoding("UTF-8");}
et Meri Bcp pour l'aide et les conseils....
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.