Avatar billede butjii Nybegynder
16. april 2006 - 03:15 Der er 17 kommentarer og
2 løsninger

Kan ikke skrive æ og ø og å i Java på Windows

Jeg har et rigtigt iritterende problem.
Jeg har lavet et javaprogram i Editplus og compilet det i kommandolininen i windows XP. Når jeg herefter kører det fra kommandolinien kan den ikke skrive æøå korrekt ud.
Programmet skriver også til en Access database og her bliver tegnene heller ikke korrekt skrevet...

Er der nogen der ved hvordan det kan klares?
Avatar billede arne_v Ekspert
16. april 2006 - 03:21 #1
Hvis EditPlus gemmer i ISO-8859-1 alias IsoLatin1 alias ANSI alias CP-1252,
så burde det være OK i Access.

Hvis det skal se OK ud i en kommando prompt så skal du nok køre med:

java -Dfile.encoding=ISO8859-1 ...

og have din windows sat til CP-850
Avatar billede arne_v Ekspert
16. april 2006 - 03:22 #2
men som hovedregel:
  snak dansk eller engelsk i GUI
  snak engelsk i console
Avatar billede butjii Nybegynder
16. april 2006 - 13:36 #3
Tak for svaret. Kan ikke umiddelbart få løst problemet.
Editplus gemmer i ANSI og jeg har prøvet at kløre programmet med -Dfile-optionen. Det ændrer dog ikke noget. Jeg har iøvrigt en dansk win XP.

Har lavet følgende lille test:
import java.io.*;
public class test
{
    public static void main(String[] args) throws Exception
    {
        String str = "Lidt danske bogstaver: æøå";

        File outputFile = new File("test.txt");
        FileWriter out = new FileWriter(outputFile);
        out.write(str);//virker ok
        System.out.println(str);//virker ikke ok - kan ikke skrive æøå
        out.close();
    }
};

Det der bliver skrevet til filen er fint(med æøå), det der bliver skrevet til skærm er ikke fint(mærkelige tegn)

Her iøvrigt prøvet at installer en ny compiler som jeg ved understøtter danske tegn(jdk 6 beta - multi language), men det hjalp heller ikke

Er der en der ved hvad der er galt?
Avatar billede arne_v Ekspert
17. april 2006 - 05:58 #4
jeg vrøvler

java -Dfile.encoding=Cp850 ...
Avatar billede butjii Nybegynder
17. april 2006 - 12:10 #5
haha

Nu skriver test-programmet danske bogstaver til skærmen, men mærkelige tegn til filen...:-(
Avatar billede arne_v Ekspert
17. april 2006 - 12:58 #6
tja - sådan virker det

men så drop det og prøv:

System.setOut(new PrintStream(System.out, true, "Cp850"));
Avatar billede arne_v Ekspert
17. april 2006 - 12:58 #7
(øverst i dit program inden du starter med at udskrive)
Avatar billede butjii Nybegynder
17. april 2006 - 14:18 #8
Mange tak for hjælpen arne v.
Jeg må dog indrømme at jeg ikke fatter hvordan det virker.
Når jeg bruger
System.setOut....
så skrives æøå rigtigt ud når programmet køres fra kommandolinien, men ikke når det køres fra Editplus. Når jeg ikke bruger System.setOut er det omvendt. I begge tilfælde skrives der korrekt til filen.

Jeg kan stadig ikke få databasen skrivningen til at virke...
Når jeg henter HTML-koden fra en webside og skriver det til en accessdatabase så går der også ged i det når det er æøå.
Jeg har indkredset problemt til at det må være metoden der læser HTML-koden ind i en streng, som så senere deles op og skrives til accessdatabasen, der er noget galt med. For hvis koden skrives til en fil er der ingen problemer.

Kode:
private static String getWebPage(String url, String fileName, Boolean writeFile) throws Exception
    {
    URL webAdr = new URL(url);
        URLConnection con = webAdr.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
            con.getInputStream()));
        String inputLine, returnString="";
       
        while ((inputLine = in.readLine()) != null)
        {
        returnString = returnString.concat(inputLine + "\n");
        }

        //Skrives korrekt til fil
    if(writeFile)
    {
        String outputFileName = new String(fileName);
        FileWriter out = null;
        File outputFile = new File(outputFileName);
        out = new FileWriter(outputFile);
        out.write(returnString);
        out.close();
    }

        in.close();
    System.setOut(new PrintStream(System.out, true, "Cp850"));
   
        //Skrives ikke korrekt ud
        System.out.println(returnString);

        //Skrives korrekt ud
    System.out.println("********æøå********************");
    return returnString;
};

Det undrer mig at strengen returnString skrives korrekt til fil men ikke til skærm(hverken i kommandolinie eller i Editplus).
Hvis du kan forklare hvad der sker vil jeg være dig meget taknemmelig...
Avatar billede arne_v Ekspert
17. april 2006 - 14:49 #9
EditPlus capturer vel output fra din koersel og viser det i ANSI

og saa har man den effekt
Avatar billede arne_v Ekspert
17. april 2006 - 14:54 #10
med hensyn til dit kode eksempel skal du nok ogsaa have sat input til Cp850
Avatar billede arne_v Ekspert
17. april 2006 - 14:59 #11
med hensyn til database, saa skal du nok forklare lidt mere om hvad der sker
Avatar billede butjii Nybegynder
17. april 2006 - 15:21 #12
Hvordan sættes input til Cp850?

System.setIn(?)
Avatar billede arne_v Ekspert
17. april 2006 - 15:28 #13
BufferedReader in = new BufferedReader(new InputStreamReader(            con.getInputStream(), "xxxx"));

hvor "xxxx" er "Cp850" eller "ISO8859-1" eller "UTF-8" afhaengig af hvad det faktisk
er (jeg tror faktisk ikke at det er Cp850)
Avatar billede butjii Nybegynder
17. april 2006 - 15:36 #14
Yes, det var det der skulle til. Tusind tak - nu funker det hele, også databasen.

Tak tak
Avatar billede butjii Nybegynder
17. april 2006 - 15:36 #15
BTW det er UTF-8...
Avatar billede arne_v Ekspert
17. april 2006 - 15:50 #16
saa ligger jeg et svar
Avatar billede butjii Nybegynder
17. april 2006 - 15:55 #17
yep
Avatar billede butjii Nybegynder
17. april 2006 - 15:56 #18
...
Avatar billede butjii Nybegynder
17. april 2006 - 15:58 #19
havde lige lidt problemer med at få svaret accepteret...
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