Conversione file con codifica caratteri "custom"

di il
32 risposte

32 Risposte - Pagina 2

  • Re: Conversione file con codifica caratteri "custom"

    migliorabile ha scritto:


    2) piu' probabile, il bit e' settato in modo da avere il numero di bit a 1 in numeri PARI: controllo di errore
    Uhm ... non ci avevo pensato prima!
    Non ho verificato tutto il testo di esempio ma in effetti ... il bit 7 pare proprio un bit di "parity".

    ÒUÌÌÉ byte: D2 55 CC CC C9

    in ciascuno di questi 5 byte il numero di bit "1" è sempre PARI.

    @migliorabile:

    migliorabile ha scritto:


    Per la lettura del file, MEGLIO LEGGERLO IN BINARIO, SENZA le conversioni fatte dall'encoding: si rischia che l'ENCODING faccia piu' danni che altro.
    Giusto. Al limite si può usare la solita trafila di lettura con InputStreamReader, ma attenzione, con un encoding come il ISO-8859-1 che perlomeno "mappa" ciascun byte esattamente nel char senza fare trasformazioni. Invece NON va usato es. "US-ASCII" perché il decoder Java quando trova un byte fuori dal set ASCII (ovvero bit alto 1) genera il carattere Unicode U+FFFD che è il replacement character usato per i codici sconosciuti.
  • Re: Conversione file con codifica caratteri "custom"

    migliorabile ha scritto:



    Ho visto ora il codice Java. Puoi tentare questa strada:
    
    ...
    char c = (char)r & 0x7F;
    ...
    
    Strata tentata

    In effetti usare l'encoding causa solo fastidi, ho risolto come consigliato, per ora, usando codifica ISO-8859-1.

    Con poche righe ho un risultato QUASI leggibile, sembra natale vi ringrazio infinitamente.

    Ora pare ci sia solo un problema con il fine riga, infatti all'inizio di ogni riga convertita spunta un carattere "random", se è solo così mi basta tagliare la stringa... ora provo.... intanto posto il codice (non prendete paura )
    private void convert() {
            if(file1!=null) {
                jTextArea1.setText("");
                try {
                    Charset encoding = Charset.forName("ISO-8859-1");
                    File file = new File(file1);
                    InputStream input = new FileInputStream(file);
                    Reader reader = new InputStreamReader(input,encoding);
                    Reader buffer = new BufferedReader(reader);
                    int r;
                    while((r=buffer.read()) != -1) {
                        char c = (char)r;
                        char cc = convertChar(c);
                        jTextArea1.append(String.valueOf(cc));
                    }
                } 
                catch (FileNotFoundException ex) {
                    // file not found
                } catch (IOException ex) {
                    // io exc
                }
            }
        }
        
        private char convertChar(char c) {
              char r = (char) ((char)c & 0x7F);
              return r;
        }

    Ed ecco il risultato:
    • %N0 M00 (RULLI D235 L574,5)
      MN1 OZ5
      XN2 T1 M6 (TONDO R8)
      PN3 M3 M41 G96 S100 F0,45
      =N4 G00 X250 Z8
    Se taglio la stringa però non tornerò mai più al file originale. Ergo dovrei capire cos'è quel carattere "random" per poi fare la conversione inversa e tornare al cnc (che era poi il problema di partenza )
  • Re: Conversione file con codifica caratteri "custom"

    max265 ha scritto:


    Ora pare ci sia solo un problema con il fine riga, infatti all'inizio di ogni riga convertita spunta un carattere "random"
    Innanzitutto una nota: se a fine di ogni riga hai nel file un byte 0x8D, togliendo il bit "alto" (di parity come scoperto), risulta 0x0D e questo è il classico Carriage Return ASCII. Questo sarebbe sensato/corretto (non so se hai anche il Line Feed 0x0A).

    Credo invece che ti riferisci a quei caratteri che avevo notato anche io prima, qui sotto in rosso:

    ‡¥N0 M00 (ÒUÌÌÉ D²35 Ì5·´¬5©
    MN± ÏZ5 
    ØN² Ô± M6 (ÔÏNDÏ Ò¸©
    PN3 M3 M´± G96 S±00 Æ0¬´5 
    ½N´ G00 ز50 Z¸ 

    questi rossi in effetti sono in più rispetto al testo decodificato che avevi postato. E in questo momento non saprei dire cosa significano. Potrebbero essere molte cose: una specie di "comando", una sorta di "checksum" della riga, o altro.

    max265 ha scritto:


    intanto posto il codice (non prendete paura )
    Nessuna "paura" (non certo per me ..)
    Hai scritto alcune cose inutili che si potevano evitare e in generale non è buonissimo.
  • Re: Conversione file con codifica caratteri "custom"

    Il carriage return c'è, per il semplice fatto che nella JTextArea faccio solo un "append" del char convertito e mi ritrovo un testo riga per riga, salvo appunto quel carattere "random" che non sembra avere nessuna logica

    Ovviamente sono aperto a consigli anche su quanto già scritto!
  • Re: Conversione file con codifica caratteri "custom"

    Ma non hai proprio modo di fare scaricare i due file (originale e correttamente convertito) per farceli provare direttamente?
  • Re: Conversione file con codifica caratteri "custom"

    oregon ha scritto:


    Ma non hai proprio modo di fare scaricare i due file (originale e correttamente convertito) per farceli provare direttamente?
    Ci sono dettagli all'interno che non posso pubblicare.

    Quello che vorrei fare a questo punto, se e quando in officina ne avrò il tempo, è provare a riconvertire aggiungendo un carattere a caso e vedere cosa dice il cnc....
  • Re: Conversione file con codifica caratteri "custom"

    Non credo sia un buon metodo. Potresti cercare di eliminare i dati che non puoi pubblicare dal file sorgente. In questo modo si poteva studiare meglio (con un editor binario) piuttosto che vedere solo caratteri in un forum e avere una soluzione definitiva e completa.

    Comunque, buona fortuna.
  • Re: Conversione file con codifica caratteri "custom"

    oregon ha scritto:


    Non credo sia un buon metodo. Potresti cercare di eliminare i dati che non puoi pubblicare dal file sorgente. In questo modo si poteva studiare meglio (con un editor binario) piuttosto che vedere solo caratteri in un forum e avere una soluzione definitiva e completa.

    Comunque, buona fortuna.
    Mi manca anche da capire QUALI caratteri hanno l'8 bit alto e quali no... e magari anche il perché

    Credo che a questo punto, come qualcuno già suggeriva, faccio prima a creare un programma cnc contenente tutti i possibili caratteri e crearmi una mappa manualmente...

    Poi quel programma posso tranquillamente postarlo dove voglio!

    Nel frattempo mi consigli un editor binario?
  • Re: Conversione file con codifica caratteri "custom"

    Di editor binari ce ne sono a bizzeffe, basta cercare su internet e ne trovi tanti. Sono un po' tutti uguali ma NON sono la soluzione del problema.

    E' solo uno strumento che ti consente di studiare meglio il contenuto del file, ma poi devi capire tu COSA fare.
  • Re: Conversione file con codifica caratteri "custom"

    max265 ha scritto:


    Mi manca anche da capire QUALI caratteri hanno l'8 bit alto e quali no... e magari anche il perché
    Cosa è il bit "alto" (bit 7) l'ho spiegato io in precedenza.
  • Re: Conversione file con codifica caratteri "custom"

    andbin ha scritto:


    max265 ha scritto:


    Mi manca anche da capire QUALI caratteri hanno l'8 bit alto e quali no... e magari anche il perché
    Cosa è il bit "alto" (bit 7) l'ho spiegato io in precedenza.
    Urca mi era sfuggito

    Quindi serve semplicemente a controllare eventuali errori di trasmissione, e quindi non è nemmeno difficile capire quali caratteri ri-codificare, ottimo!

    Manca solo quel dannatissimo carattere "senza logica"
  • Re: Conversione file con codifica caratteri "custom"

    Potrei sbagliare ma sembra un carattere di CRC che potresti eliminare completamente.

    Ma, ripeto, solo dall'esame del file si può capire.
  • Re: Conversione file con codifica caratteri "custom"

    oregon ha scritto:


    Potrei sbagliare ma sembra un carattere di CRC che potresti eliminare completamente.

    Ma, ripeto, solo dall'esame del file si può capire.
    Stavo leggendo proprio ieri sera del CRC, me lo devo studiare (perché non ci ho capito granché, neppure se è standard o se sia una cosa customizzabile) e implementarlo nel codice per tornare alla codifica del CNC.

    Per quanto riguarda la "decriptazione" come dici tu quel carattere è superfluo e mi basta tagliare la stringa, già fatto per altro, il problema sta proprio nel fare il contrario
  • Re: Conversione file con codifica caratteri "custom"

    Allora ho indagato più a fondo, la macchina è più "preistorica" del previsto. Originariamente il salvataggio su memoria esterna era affidato ad un lettore a nastro magnetico, è stato fatto un upgrade cambiando una scheda (grande come una scheda madre ATX) che si occupa del salvataggio su floppy. Purtroppo NON riesco a vedere cosa ci sta su 'sta scheda, quindi inidizi ZERO.

    Mi sento solo di dire che, se wikipedia non sbaglia, che il CRC ancora non esistesse al tempo... ( < 1985 ).
    Mi sapete elencare qualche funzione (preistorica) per il calcolo del checksum a 8bit di una riga ?

    Oppure esistono dei metodi per arrivare alla funzione partendo dal checksum?

    PS: sto aggiungendo qualche riga per estrapolare le righe e trasformarle direttamente in binario ed hex, poi vedo di postarne alcune così magari vi salta all'occhio
  • Re: Conversione file con codifica caratteri "custom"

    Mi sapete elencare qualche funzione (preistorica) per il calcolo del checksum a 8bit di una riga ?
    Un metodo "classico" è quello dello XOR bit a bit dei dati, a volte di tutti a volte solo del payload, ma non sembra questo il caso.
Devi accedere o registrarti per scrivere nel forum
32 risposte