Avatar billede swordfish8080 Nybegynder
23. september 2006 - 10:57 Der er 16 kommentarer

hvordan skal jeg decode mine danske bogstaver i et servlet-resp.

jeg har en servlet der svarer på et ajax request.
Når jeg indgår æåø i mit response giver det problemer i IE men ikke firefox.

Har ikke helt styr på, om det er i min servlet jeg ikke får lavet en uridecoding eller om det er i mit javascript(Ajax) det går galt. eller om det er mit charset der fejler.
Hjælp mig eksperter...

Her er min servletkode:
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/json; charset=ISO-8859-1");
    PrintWriter writer = null;
    try {
      writer = response.getWriter();
    } catch (IOException e) {
        e.printStackTrace();
  }
    writer.print("{city:'Århus'}"); 
}

       
                response.setContentType("text/json; charset=ISO-8859-1");
                PrintWriter writer = null;
                try {
                        writer = response.getWriter();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                writer.print("{city:'Århus'}"); 
        }


Her er min javascrip-kode:
var request = new XMLHttpRequest();
if(request != null) {
    request.open("GET", "testServlet", true);
    request.onreadystatechange = function() { readyStateChangeHandler(request); };
    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
    request.send(null);
}

function readyStateChangeHandler(req) {
    if(req.readyState == 4 && req.status == 200) {
      var obj;
      eval("obj= " + req.responseText);
    document.write(obj.city);
    }
}
Avatar billede swordfish8080 Nybegynder
23. september 2006 - 10:58 #1
hov. mit servlet-kode kom med to gange.
Avatar billede _carsten Nybegynder
23. september 2006 - 11:40 #2
Hvad med cp1252 eller cp850 ?
Avatar billede swordfish8080 Nybegynder
23. september 2006 - 12:10 #3
Har prøvet at ændre det i servleten. går ud fra at du mener her:

response.setContentType("text/json; charset=cp1252");

men giver det samme resultat. virker i firefox men ikke i IE

Der kommer der til at stå: ?rhus
Avatar billede _carsten Nybegynder
23. september 2006 - 12:28 #4
Ja - det var det jeg mente, hvad står 'json' egentlig for ?

Hvad med: response.setContentType("text/plain; charset=ISO-8859-1");

Og så er det rigtige vel egentlig sådan
response.setContentType("text/plain; charset=\"ISO-8859-1\"");
Avatar billede swordfish8080 Nybegynder
23. september 2006 - 12:52 #5
JSON er når man encoder sine data i form af JavaScript. Jeg returnerer jo javaScriptkode: {city:'Århus'}. Det står for JavaScript Object Notation.

Jeg har også prøvet at bruge text/plain i stedet, uden held.
charset=\"ISO-8859-1\" fejler helt. Giver mig en Error 500 i begge browsere

Men tror måske, at det er i javaScripten der skal rettes, får når jeg tager et kig på responseHeader i både IE og Firefox, kan jeg se, at 'content-type'  har værdien "text/plain; charset=ISO-8859-1" eller "text/json; charset=ISO-8859-1"
Avatar billede _carsten Nybegynder
23. september 2006 - 13:14 #6
Ok - et lille kig i doc siger mig også at denne ikke duer \"ISO-8859-1\"
Avatar billede swordfish8080 Nybegynder
23. september 2006 - 13:14 #7
Jeg har også forsøgt at encode strengen i min servlet inden jeg sender den afsted på følgende måde:
writer.print(URLEncoder.encode("{city:'Århus'}", "ISO-8859-1")); 

Det føre til, at jeg i både IE og firefox ser teksten som:
"%7Bcity%3A%27%C5rhus%27%7D"

jeg har dog ikke held med at prøve at bruge decodeURIComponent("%7Bcity%3A%27%C5rhus%27%7D"); i javascriptkoden. Så får jeg en scriptfejl: 'malformed URI sequence'
Avatar billede swordfish8080 Nybegynder
23. september 2006 - 13:18 #8
Har fundet en løsning.
men ved ikke om det er den rigtige måde.
Hvis jeg URLEnoder som beskrevet ovenfor i min servlet, og bruger unescape("%7Bcity%3A%27%C5rhus%27%7D"); i stedet for decodeURIComponent() får jeg det rigte både i IE og firefox.

Burde måske høre i javaScript i stedet, om det er den pæne måde at decode sine strenge.
Avatar billede _carsten Nybegynder
23. september 2006 - 13:29 #9
Lyder fornuftigt, jeg har ikke løsningen
Avatar billede arne_v Ekspert
24. september 2006 - 01:42 #10
swordfish>

Du har ikke overvejet et AJAX taglib, så du slipper for noget af alt det der
trivielle arbejde ?
Avatar billede swordfish8080 Nybegynder
24. september 2006 - 23:09 #11
Kender slet ikke noget til ajax taglib
Avatar billede arne_v Ekspert
25. september 2006 - 05:21 #12
Jeg har leget lidt med http://ajaxtags.sourceforge.net/.

Docs er ikke så gode, men koden er OK.
Avatar billede arne_v Ekspert
25. september 2006 - 05:26 #13
et eksempel:

JSP side:

<form>
Celsius: <input type="text" id="c"/><input type="button" id="c2f" value="Convert to fahrenheit"/>
<br/>
Fahrenheit: <input type="text" id="f"/><input type="button" id="f2c" value="Convert to celsius"/>
</form>
<ajax:updateField baseUrl="ConvertTemperature" source="c" target="f" action="c2f" parameters="c={c}" parser="new ResponseXmlParser()"/>
<ajax:updateField baseUrl="ConvertTemperature" source="f" target="c" action="f2c" parameters="f={f}" parser="new ResponseXmlParser()"/>

ConvertTemperatur servlet:

import java.util.*;

import javax.servlet.http.*;

import org.ajaxtags.helpers.*;
import org.ajaxtags.servlets.*;

public class ConvertTemperature extends BaseAjaxServlet {
    public String getXmlContent(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String c = request.getParameter("c");
        String f = request.getParameter("f");
        AjaxXmlBuilder bld = new AjaxXmlBuilder();
        if((c!=null && !c.equals("")) && (f==null || f.equals(""))) {
            bld.addItem("f", Integer.toString(Integer.parseInt(c)*9/5+32));
        } else if((c==null || c.equals("")) && (f!=null && !f.equals(""))) {
            bld.addItem("c", Integer.toString((Integer.parseInt(f)-32)*5/9));
        }
        return bld.toString();
    }
}
Avatar billede arne_v Ekspert
25. september 2006 - 05:29 #14
man skal ikke selv skrive JavaScript eller XML

man skal bruge nogle jar filer og nogle JavaScript filer og putte lidt i toppen
af sine JSP sider

men alt fedteriet ordner ajaxtags koden
Avatar billede swordfish8080 Nybegynder
25. september 2006 - 09:11 #15
Okay.
Det ser meget spændende ud.
Må prøves næste gang.
Avatar billede arne_v Ekspert
10. december 2006 - 00:16 #16
tid at få afsluttet her ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester