Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:01 Der er 61 kommentarer og
1 løsning

Debian, Tomcat4, MySQL: Problemer med æøå !

Hej

Jeg har problemer med at skrive æøå ud fra min mysql database...
Henter en tekst fra databasen ud i en string og udskriver den derefter ... navnet "Søren Sørensen" bliver til "S?ren S?rensen" og det ser ikke så smart ud !
Jeg har prøvet at skrive "String navn =  "æøå" ", og så skriver den fint æøå ud !
Hvis jeg kigger i databasen med kommandoen "mysql" kan jeg fint se æøå !

Håber i kan hjælpe mig !

/Carsten
Avatar billede arne_v Ekspert
18. februar 2003 - 22:04 #1
Og når du siger "skriver ud" mener du skrevet ud på JSP side ?
Avatar billede sukos Juniormester
18. februar 2003 - 22:05 #2
hmm, i PHP er der en funktion, htmlentities(), som netop laver div. tegn om til straight html

$var = htmlentities($var);
echo $var;

Nu ved jeg ikke hvad du bruger til at hente data fra DB'en?
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:06 #4
Når jeg siger skrive ud, mener jeg ud på JSP siden !
Jeg tilgår databasen i en bean, hvor jeg har nogle get-metoder som retunere en string.. dem kalder jeg så fra JSP siderne !
Avatar billede arne_v Ekspert
18. februar 2003 - 22:07 #5
mysql er jo en kommando linie utility og bruger derfor sikkert CP850
eller noget tilsvarende skummelt.

Er data lagt ind med mysql eller via din webapp ?
Avatar billede arne_v Ekspert
18. februar 2003 - 22:09 #6
Hvis data er lagt ind via din webapp så bør de virke når de skal vises
igen.

Derimod er det meget naturligt at noget loadet med mysql
utility vises forkert.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:10 #7
Jeg har en kæmpe kundedatabase fra et andet program hvor det er galt i... men når jeg selv opretter en kunde (vha. mine jsp sider) kommer æøå stadig ikke med !
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:12 #9
loadet: Jeg er ikke helt med på det i det lange link fra dig!
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:13 #10
jeg er ikke meget for at copy og paste alt hvad de har skrevet ;) håber du forstår men jeg er ret sikker på du finder løsningen der.
Avatar billede jacobve Nybegynder
18. februar 2003 - 22:14 #11
problemet kan også ligge i det tegnsæt du bruger i dine jsp sider.

prøv evt. med denne i stedet for hvad du selv bruger:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:17 #12
jacobve: Det hjalp desværre ikke !
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:18 #13
loadet: Det sidste link du har sendt mig ser interessant ud... men hvor i server.xml er det lige jeg skal sætte linien ind ?
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:19 #14
på min server ligger den på
%locate server.xml
/usr/local/jakarta-tomcat3.3/conf/server.xml
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:20 #15
nåå
sec
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:20 #16
loadet: Jeg har fundet filen.. men hvor i den indsætter jeg den linie fra linket ?
Avatar billede arne_v Ekspert
18. februar 2003 - 22:21 #17
Hvis du explicit loader din JDBC driver, så kunne det være
interessant at se om:

Properties pr = new Properties();
pr.put("characterEncoding", "UTF8");
pr.put("useUnicode", "TRUE");

con = DriverManager.getConnection("jdbc:mysql://localhost/test", pr);

ville løse problemet for data der bliver lagt ind via dib webapp.

Og hvis ja så kan de gamle data konverteres.
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:21 #18
søg efter  <DecodeInterceptor /> ..
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:23 #19
loadet: Har ikke den sektion.. hverken på min Debian eller WinXP ?.. undre undre !
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:23 #20
den replacer du så bare med <DecodeInterceptor debug="0" defaultEncoding="UTF-8" useSessionEncoding="false"/>
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:24 #21
ok .. så prøv bare at sætte den ind .. og så restart tomcat .. du kan altid fjerne den hvis det ikke virker ..
Avatar billede arne_v Ekspert
18. februar 2003 - 22:26 #22
I er klar over at Tomcat 3 og Tomcat 4 muligvis ikke gør tingene
helt ens ?
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:27 #23
yup ... men det kan da ikke skade at prøve
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:34 #24
loadet: Nu fik jeg linien sat ind... men det ændre ikke rigtig noget...
Måske har jeg sat den ind et forkert sted... under <server> !
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:37 #25
nej arne_v har nok ret i at den support er blevet fjernet version 4 .. jeg har prøvet og kigge men jeg kan ikke finde dokumentationen for server.xml for version 4
Avatar billede arne_v Ekspert
18. februar 2003 - 22:40 #26
Måske det var tid at prøve med de connection properties ?
Avatar billede arne_v Ekspert
18. februar 2003 - 22:41 #27
Iøvrigt hvilken version og MySQL JDBC driver bruger du ?
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:45 #28
jeg fandt det her
> We had the same issue with another system, and solved it by creating a
> filter (according to servlet 2.3 spec) that would change the character
> encoding of the request just before the actual servlet would be invoked.
> This works for Tomcat 4 and all other 2.3 based servlet containers
> Tomcat 3.3x has a special interceptor in server.xml that would do the same.
>
>  <DecodeInterceptor DefaultEncoding="UTF-8" />

http://www.mail-archive.com/turbine-user@jakarta.apache.org/msg09606.html

ved desværre ikke så meget om jsp programmering .. er mere interreseret i server delen og svare på eksperten men ellers held og lykke ;)
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:45 #29
arne_v.. jeg forstod på dig at de data som er gemt i databasen ikke vil kunne vises med æøå med din metode..  !

Jeg har fundet ud af noget underligt med den anden løsning.. Jeg har prøvet at flytte linien rundt i min server.xml, og er kommet til et underligt resultat..
Nu skriver den kun ud indtil den kommet til et æ,ø eller å  ! F.eks. skriver den "Hans Sørensen" som "Hans S" .. men så oprettede jeg "Søren Sørensen" og det virkede fint !
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:45 #30
Driver version.. jaae... Hvor ser jeg det ?
Avatar billede simonvalter Praktikant
18. februar 2003 - 22:49 #31
C:\j2sdk1.4.1_01\mysql-connector-java-2.0.14mysql-connector-java-2.0.14 <--- driver version går jeg ud fra.

Class.forName("com.mysql.jdbc.Driver").newInstance();
Avatar billede arne_v Ekspert
18. februar 2003 - 22:49 #32
Version - hvad hedder jar-filen med driveren ?
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:50 #33
Version 3.0.5.. måske :)
Avatar billede arne_v Ekspert
18. februar 2003 - 22:51 #34
Ja - det er rigtigt at mit forslag formentligt kun vil
hjælpe på nye data, men så kan gamle data jo konverteres
en gang for alle.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 22:54 #35
arne_v: Konverteres ! Det lyder meget besværligt !... der må være en nemmere måde !
Avatar billede arne_v Ekspert
18. februar 2003 - 22:58 #36
Jeg tror det er vigtigere at vælge den rigtige løsning
end den nemmel øsning.
Avatar billede arne_v Ekspert
18. februar 2003 - 23:00 #37
Men jeg undrer mig iøvrigt lidt. Jeg prøvede lige selv at gemme
ÆØÅæøå i en MySQL og hente dem igen.

Det virkede perfekt.

MySQL 3.23.52 + MySQL Connector Java 2.0.14

De så sære ud i mysql tool, men de kom rigtigt ud i Java igen.
Avatar billede arne_v Ekspert
18. februar 2003 - 23:02 #38
Som hvilke tegn kommer "gamle" ÆØÅæøå ud ?

Som hvilke tegn kommer "nye" ÆØÅæøå ud ?
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:05 #39
Arne_v: Kører du windows? jeg kører debian ! .. på min windows maskine virker det fint !
De kommer alle ud som "?" nu.. men jeg kan sagtens se dem i "mysql"-tool !
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:07 #40
Kom også lige til at tænke på din løsning med at konvertere... jeg skal opdatere databasen ud fra concorde på et senere tidspunkt igen.. så det skulle gerne kunne gøres uden at konvertere !
Avatar billede arne_v Ekspert
18. februar 2003 - 23:12 #41
Ja - jeg kører Windows.

Og det er altså et Linux specifikt problem (så er der jo næppe CP850 !).

Og Linux kører default ISO-8859-1.

Det kunen altså stadigvæk værre interessant bare at prøve
med de properties og se om det havde en effekt på nye
navne.
Avatar billede arne_v Ekspert
18. februar 2003 - 23:13 #42
Hvis man har fået lavet et konverterings-program, så er det
jo ikke noget problem at køre det igen.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:17 #43
jeg har prøvet dit eksempel.. og det virker fint....
Men jeg ved ikke lige helt hvordan jeg laver det konverteringsprogram !
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:20 #44
Humm... sad lige og prøvede det på min winxp maskine.. når jeg bruger din properties kode.. så skriver den også æøå med ? i databasen.. men så snart jeg ændre i en .. så virker det fint !
Avatar billede arne_v Ekspert
18. februar 2003 - 23:22 #45
Det kan vi vel også finde ud af.

Bruger du JDK/JRE 1.3 eller 1.4 ?
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:24 #46
1.4 på windows og 1.3 på debian !...
kan du i store træk beskrive hvordan jeg laver det program ?
Avatar billede arne_v Ekspert
18. februar 2003 - 23:29 #47
Man erstatter bare de problematiske karakterer med de rigtige
karakterer.

Jeg vil gerne hjælpe med det.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:30 #48
Men de er jo alle ? .. hvordan finder man ud af om det er et æ, ø eller å ?
Avatar billede arne_v Ekspert
18. februar 2003 - 23:32 #49
Første problem er at identificere præcis hvordan ÆØÅæøå
er når de er forkerte.

Hvis nu man har en Streng s som skulle være "Rødgrød" -
hvilken værdi har s.getBytes()[1] så ?
Avatar billede arne_v Ekspert
18. februar 2003 - 23:33 #50
Jeg tror nemlig ikke på, at de faktisk er ægte spørgsmålstegn.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:35 #51
Kan man så ikke bare lave et for løkke som kigger på hver string ?
Det ville da være nemmere ? Sådan den konvertere for hver søgning ?
Avatar billede arne_v Ekspert
18. februar 2003 - 23:36 #52
Jeg får iøvrigt lige en ide.

Hvordan ser s2 i:

String s = "en af de gamle forkerte stenge";
String s2 = new String(s.getBytes("ISO-8859-1"));

ud ?
Avatar billede arne_v Ekspert
18. februar 2003 - 23:37 #53
Muligvis kan man godt konvertere dem på når de skal vises i.s.f. en gang
for alle.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:42 #54
De er stadig med "?"... Det hjalp ingenting !
Avatar billede arne_v Ekspert
18. februar 2003 - 23:44 #55
Så kunne det være interessant at få den numeriske værdi med
s.getBytes[index].

Jeg tror iøvrigt at jeg vil gå i seng nu.

Men hvis ikke du er kommet videre imorgen, så vil jeg
gerne fortsætte.

Og hvis vi kan finde de numeriekse værdier af de forkerte
tegn så kan vi også erstatte dem.
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:48 #56
Jeg vil gå vidre med det i morgen !
Tak for hjælpen !
Avatar billede carls2002 Nybegynder
18. februar 2003 - 23:59 #57
hvis jeg skriver s.getBytes()[2]; på ordet Søren ! får jeg resultatet 63 !

Kan man ikke lave en metode som konvertere en string ?
Avatar billede arne_v Ekspert
19. februar 2003 - 07:20 #58
Det var slemt.

63 er nemlig et ægte spørgsmåls-tegn.
Avatar billede arne_v Ekspert
19. februar 2003 - 08:11 #59
Næste ide.

Hvis du i.s.f.
  String s = rs.getString(feltnr)
kalder med
  byte[] ba = rs.getBytes(feltnr);

hvad indeholder ba så får ø ?
Avatar billede arne_v Ekspert
19. februar 2003 - 11:54 #60
Hvis den indeholder 248 eller -8 så vil jeg tro at følgende
virker:

String s = new String(rs.getBytes(feltnr), "ISO-8859-1");
Avatar billede carls2002 Nybegynder
19. februar 2003 - 17:53 #61
Arne_v: Du er bare den bedste Arne_v jeg ikke kender.... Din sidste mulighed var bare den rigtige.... Du skal have mange tak for hjælpen... Det er rart med sådan en klog mand :o) !
Håber jeg kan hjælpe dig en anden gang (Grin bare) !
/Carsten S
Avatar billede arne_v Ekspert
19. februar 2003 - 18:19 #62
Glad for at kunne hjælpe.
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