Avatar billede rina Nybegynder
30. marts 2006 - 12:12 Der er 10 kommentarer og
1 løsning

Charset eksempel

Hejsa

Er der nogle der kan give et eksempel på at læse en fil fra disken, konventerer den til et andet charset og gemme filen igen.

vh.
Rina
Avatar billede rina Nybegynder
30. marts 2006 - 13:33 #1
-og gerne kunne konventerer tilbage igen

Jeg har faktisk få koden til at encode filen... men når jeg så vil encode tilbage igen, går det ikke specielt godt.
Så skal jeg mon decodefilen først... ? (Prøver lidt videre... men et "ekspert" eksempel vil stadig være ok *S*)
Avatar billede arne_v Ekspert
30. marts 2006 - 13:56 #2
jeg lavede det her eksempel i januar:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class CharSetConvert {
    private final static String INFILE = "C:\\z1.txt";
    private final static String OUTFILE = "C:\\z2.txt";
    private final static String INCS = "UTF-8";
    private final static String OUTCS = "ISO-8859-1";
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(INFILE), INCS));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(OUTFILE), OUTCS));
        String line;
        while((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();
        }
        br.close();
        bw.close();
    }
}
Avatar billede rina Nybegynder
30. marts 2006 - 18:30 #3
Hej Arne

Mange tak.
Sender du et "svar"...

Et tillægsspørgsmål: hvis man encoder tegn til en type der ikke er understøttet, hvilken måde er den gængse til at opdage det på?
Avatar billede arne_v Ekspert
30. marts 2006 - 18:35 #4
svar
Avatar billede arne_v Ekspert
30. marts 2006 - 18:40 #5
jeg er bange for at de bliver til spoergsmaalstegn ...
Avatar billede rina Nybegynder
30. marts 2006 - 18:44 #6
ja, har også opdaget spørgsmålstegnene... har kikket efter en måde til at validerer på.... jeg kan selvfølgelgi bare encode tilbage igen og tjekke det så er mangen til det oprindelige... meeennn... tror det er mig der ikke har fundet den gængse måde at håndterer det på endnu.
Avatar billede arne_v Ekspert
30. marts 2006 - 19:13 #7
der er nogle klasser i java.nio.charset hvor jeg mener at du kan faa en exception
i tilfaelde af tegn som ikke kan udskrives

skal jeg proeve at boxe et eksempel med dem ?

(kraever Java 1.4 men det har de fleste vel nu)
Avatar billede rina Nybegynder
30. marts 2006 - 20:32 #8
Hej Arne

Jeg bruger java 1.5 faktisk.. så hvis du har tid og lyst er du meget velkommen... så er det bare lige om jeg skal starte en nyt spørgsmål, for du kan få point for det...
Avatar billede arne_v Ekspert
31. marts 2006 - 04:15 #9
se:

package march;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.channels.Channels;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;

public class CharsetProblems {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\io.txt"), "us-ascii"));
        bw.write("ÆØÅæøå");
        bw.close();
        CharsetEncoder cse = Charset.forName("us-ascii").newEncoder();
        cse.onUnmappableCharacter(CodingErrorAction.REPORT);
        //cse.onUnmappableCharacter(CodingErrorAction.REPLACE);
        //cse.replaceWith("#".getBytes());
        Writer w = Channels.newWriter(Channels.newChannel(new FileOutputStream("C:\\nio.txt")), cse, 512);
        w.write("ÆØÅæøå");
        w.close();
    }

}
Avatar billede rina Nybegynder
06. april 2006 - 08:57 #10
Hej Arne

Undskyld jeg først svare nu.
Mange tak for eksemplet. Har tilpaset det til programmet og det virker fint. Kan se du har siddet oppe sent om nattet.. mange tak igen. Ved du hvordan jeg kan forhøje point og give dig dem? Alternativt starter jeg bar et nyt spørgsmål du kan svare på.

Med venlig hilsen og tak
Rina
Avatar billede arne_v Ekspert
06. april 2006 - 13:20 #11
jeg er 6 tidszoner fra Danmark så 04:15:40 på Eksperten er 22:15:40 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