/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Encoding problemer med Resin, MySQL og JDK~
Fra : Peter Lind


Dato : 19-10-03 19:04

Hejsa

Jeg kan overhovedet ikke se hvor mit problem ligger, så nu skriver jeg her,
i håbet om at der er en java-programmør, der har set noget lignende...

Jeg har lige re-installeret en Linux-server. Den gamle harddisk stod af, så
der var ikke andet at gøre. I den forbindelse har jeg opgraderet Resin fra
2.0.5 til 3.0.3 og Java (JDK) fra 1.3.1 til 1.4.2. MySQL er vist også
opgraderet, men jeg kan ikke huske versionerne, og det er forhåbentlig også
mindre relevant.
Men efter reinstallationen har jeg problemer med encodningen af mine æ ø og
å, der ligger fint i databasen, men kun vil vises på jsp-sider som
tegn#65533 (samme tegn for dem alle).

Jeg har eksperimenteret med at sætte -encoding ISO-8859-1 på Resins
parametre til Java-compileren, men det er den ligeglad med.
Nu ved jeg ikke rigtig hvor jeg skal kigge efter fejl, eller ændre
opsætninger, så ethvert forslag er velkomment.

Jeg kan fint både læse og ændre æ ø og å med phpMyAdmin, og kan også uden
problemer se dem i et mysql client-program, det er først når Java bliver
indblandet, at det holder op med at virke.

--
Mvh
Peter Lind



 
 
Peter Lind (20-10-2003)
Kommentar
Fra : Peter Lind


Dato : 20-10-03 17:27

Peter Lind wrote:
> Hejsa
>
> Jeg kan overhovedet ikke se hvor mit problem ligger, så nu skriver
> jeg her, i håbet om at der er en java-programmør, der har set noget
> lignende...

Jeg har løst en del af problemet, men jeg synes det er en lidt fusket
løsning. Den er korrekt nok, men jeg ville gerne klare mig uden.

Jeg tilføjer nu følgende til stien til databasen:
?useUnicode=true&characterEncoding=ISO-8859-1

Så virker databaseopslag, men der er stadig encoding-problemer med filer.
Kan man på nogen måde få JDK'en til at benytte en bestemt global encoding?
Jeg gider ikke rigtig at skulle til at indføre
setDefaultEncoding("ISO-8859-1") på alle io-kald i alle klasser i alle
webhoteller.

Nogle forslag?

--
Mvh
Peter Lind



Soren Kuula (22-10-2003)
Kommentar
Fra : Soren Kuula


Dato : 22-10-03 22:12

Hej Peter

> Jeg har løst en del af problemet, men jeg synes det er en lidt fusket
> løsning. Den er korrekt nok, men jeg ville gerne klare mig uden.

Det tegn er vist en indikation af at en Reader - eller en af de andre
klasser som konverterer udefra kommende data til stringe (der er nogle nye i
java.nio) - har f?et et tegn i indsugningen som den ikke kan konvertere til
et tilsvarende Unicode (Java bruger UTF-8 internt throughout).

Jeg vil tippe p? at din JDBC driver forventer en anden encoding end hvad den
faktisk faar. Hvis der forsvinder et tegn efter hvert ae, oe, aa vil jeg
osse tro at driveren forventer UTF-8.

Jeg havde selv engang et lign. problem (det hed SDK1.3 dengang) som jeg var
nede i org.gjt.mm.mysql og lave et fix for ;). Men for mig var det nok fordi
min platform er KINESISK. Det saa for mig ogsaa ud som om at dataene "laa
fint" i databasen, men det var saa bare fordi mappingfejlen ikke var DER.
Kan ikke huske detajlerne, men mm.mysql (som nu hedder
com.mysql.etellerandet) kan passes et Properties objekt et eller andet sted
hvor man laegger encodingen ned i.

Overvejet at koere med UTF-8 konsekvent over hele linien ? Eller lige nu,
bare se efter om det virker ? Det vil jeg i hvert fald selv paa sigt.

(du skal goere som jeg siger, ikke som jeg goer - MIT system defaulter til
GB2312, specielt Outlook

Hvad er dine user.language, file.encodig properties ?

import java.util.Enumeration;
import java.util.Properties;

public class SystemEnvTest {
public static void main(String[] args) {
Properties bundprop = System.getProperties();
Enumeration numse = bundprop.keys();
while (numse.hasMoreElements()) {
Object el = numse.nextElement();
System.out.println(el + "\t:\t" + bundprop.getProperty((String)el));
}
}
}

Hvis du vil deltage i en analyse af alle resultater, kan jeg overtales til
at grave min modificerede JDBC driver frem :)

MVH
Soren



Soren Kuula (22-10-2003)
Kommentar
Fra : Soren Kuula


Dato : 22-10-03 22:21

Hej Peter,

Glemte : Den --encoding=.... som du passer til javac (direkte eller
indirekte) har kun relevans for dekodningen af (navne, literaler) i dine
java source filer.
Der er ingen runtime virkning.

MVH
Soren



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste