Avatar billede kegel Nybegynder
16. maj 2005 - 13:05 Der er 7 kommentarer og
1 løsning

Encoding problem i Tomcat, Struts eller ?

Problemstilling: Danske bogstaver modtages kan ikke udskrives i Struts action:

1) Jeg har en jsp siden med følgende angivelse:

<%@ page contentType="text/html;charset=UTF-8" %>

samt et par tilhørende input felter. Det angiver - mig bekendt - at siden benytter - som skrevet står UTF encoding. Danske karakter i html koden kan altså ikke benyttes direkte.

2) Jeg har lavet et servlet filter som sætter encoding til UTF-8.

3) I min action klasse står der ganske rigtigt at der er anvendt UTF encoding.

4) Når brugeren indtaster æ ø å så kan de imidlertidigt ikke genskabes ved System.out.print i action klassen. Heller ikke selvom jeg hardcoder ÆØÅ i en string.

5) Hvis jeg laver et almindeligt Java program og anvender fx. actionForm klassen, jamen så skrives ÆØÅ korrekt ud (ved hardcoding).

Ovenstående antyder altså at der er en eller anden setting i Tomcat, Struts, JVM eller .... som ikke bliver sat korrekt. Nogle der har et bud?
Avatar billede arne_v Ekspert
16. maj 2005 - 13:21 #1
hvordan komemr ÆØÅ til at se ud ?

hvordan checker du dem ?  (console er jo f.eks. CP-437 på windows)

hvad laver det servlet filter helt præcist ?
Avatar billede kegel Nybegynder
16. maj 2005 - 13:27 #2
1) servlet filer - helt simpelt i doFilter:

request.setCharacterEncoding(encoding);

hvor encoding bliver sat i web.xml således:

<filter>
    <filter-name >Set Character Encoding</filter-name >
    <filter-class>encoding.Encoding</filter-class >
    <init-param>
        <param-name>encoding</param-name >
        <param-value>UTF-8</param-value >
    </init-param>
</filter>
 
<filter-mapping>
    <filter-name>Set Character Encoding</filter-name >
    <servlet-name>action</servlet-name>
</filter-mapping >

2) Hvordan ser de ud:

(hardcode) ÆØÅ ser således ãï og et eller andet besynderligt tegn

3) Via System.Out.print i action klassen
Avatar billede kegel Nybegynder
16. maj 2005 - 13:32 #3
Jeg har eksempelvis også forsøgt

String str = new String("ÆØÅ".getBytes(), "UTF-8");

eller

String str = new String("ÆØÅ".getBytes(), "iso-8859-1");

Der kommer ikke nogle Æ Ø eller Å ;-(
Avatar billede arne_v Ekspert
16. maj 2005 - 13:34 #4
Et console vinduepå windows kan ikke vise ÆØÅ korrekt !

Hvis de bliver skrevet til en fil hvordan ser de så ud ?
Avatar billede kegel Nybegynder
16. maj 2005 - 13:55 #5
Shit .... hvor dum har man lov til at være. Du har jo så indlysende helt ret. Jeg kører min applikation i Eclipse, men som web applikation i Tomcat og udskriver til et DOS window.

jeg udskriver følgende:

      FileOutputStream fin = new FileOutputStream ("c:\\Test.txt");     
      fin.write(iform.getUserName().getBytes("iso-8859-1"));     
      fin.close();

og ser nu helt korrekt ÆØÅ ....

Når jeg skal den modsatte vej (fra databasen) skal jeg formodentlig blot den modsatte vej fra iso-8859-1 til UTF-8?
Avatar billede kegel Nybegynder
16. maj 2005 - 13:56 #6
Øh du skal vis lige lave et svar arne ... før jeg kan give dig dine velfortjente point. Tak for hjælpen
Avatar billede arne_v Ekspert
16. maj 2005 - 14:00 #7
svar
Avatar billede arne_v Ekspert
16. maj 2005 - 14:02 #8
jeg er lidt i tvivl om hvad du mener med den modsatte vej
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