Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    11

    [JAVA] problemi encoding lettura file hex

    Ciao a tutti, vi spiego qual'è il mio problema.
    Devo leggere un file creato con un editor esadecimale per inviare poi tramite seriale i dati alla eeprom.
    Ho già fatto questa operazione con diversi file e nn ho mai avuto problemi, questa volta però il file contiene numeri superiori all' 80 e quando vado a leggere nel file i numeri 81 8D e 8F non sono riconosciuti e vengono sostituiti da un "?".
    Andando a consultare la mappa dei caratteri il punto di domanda corrisponde all'esadecimale 3F e così alla eeprom non sono inviati più i numeri esadecimali 81 8D e 8F ma 3F 3F e 3F.

    Ho provato a utilizzare InputStreamReader

    carica = GestisciFile.getFile();
    file = new File(carica);
    fis = new FileInputStream(file);
    isr = new InputStreamReader(fis);
    br = new BufferedReader(isr);

    ma se il file esadecimale in ingresso è fatto così:

    80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F

    in uscita ottengo questo:

    80 3F 82 83 84 85 86 87 88 89 8A 8B 8C 3F 8E 3F



    ho provato anche a cambiare il charset

    isr = new InputStreamReader(fis, Charset.forName("ISO-8859-1"));

    o

    isr = new InputStreamReader(fis, Charset.forName("UTF-8"));

    ma il risultato peggiora...

    Ho provato anche con DataInputStream ma nn cambia niente...come posso fare? :master:

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] problemi encoding lettura file hex

    Originariamente inviato da gaaraM83
    Devo leggere un file creato con un editor esadecimale per inviare poi tramite seriale i dati alla eeprom.
    Da quello che stai dicendo se ne deduce che il file è "binario", ovvero non devi trattare i byte contenuti come caratteri codificati in un qualche charset.

    Pertanto usare le classi di I/O orientate ai caratteri (e specificando magari un charset), non è il modo appropriato per leggere i dati binari.

    Vanno usate le classi di I/O orientate ai byte, cioè quelle che derivano da InputStream. Se è un file, basta quindi FileInputStream (e se vuoi bufferizzare, anche BufferedInputStream). Il nocciolo della questione è che devi leggere dei byte, a singoli byte per volta o a blocchi di N byte.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    11
    ok ora ci provo!!! byte bit hex mi incasino sempre e faccio una gran confusione!!! va bè imparerò....grazie x l'aiuto!

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    11
    nn ci siamo nn riesco...

    questo è il mio codice


    carica = GestisciFile.getFile();
    file = new File(carica);
    fis = new FileInputStream(file);

    poi leggo e scrivo i dati su un file per controllare che input e output siano uguali

    fileDiProva = new File("fileProva.txt");
    FileOutputStream fos=new FileOutputStream(fileDiProva);
    PrintStream ps=new PrintStream(fos);
    int letto;
    for (int i = 0; i < 150; i=i+2){
    letto = fis.read();
    System.out.println(letto);
    ps.println(letto);
    }


    ma se con l'editor esadecimale ho nel file di input questi dati: 10 11 12 13 14 ecc...

    in quello di output ho 31 36 0D 0A 31 37 0D 0A 31 38 0D 0A...

    Dove sbaglio?io voglio che file di input e di output siano identici...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gaaraM83
    io voglio che file di input e di output siano identici...
    codice:
    FileInputStream fis = ......
    FileOutputStream fos = .....
    
    
    byte[] buffer = new byte[1024];
    int len;
    
    while ((len = fis.read (buffer)) > 0)
        fos.write (buffer, 0, len);
    Ovviamente le eccezioni sono da tenere in considerazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    11
    Funziona!!!
    grazie mille, davvero!!!
    era due giorni che ci provavo...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.