Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    caratteri orientali nel file di testo

    ciao a tutti ragazzi,ho una cosa molto strana(per me ) da chiedervi,facendo delle piccole prove con la classe RandomAccessFile mi si è verificato un fatto stranissimo:
    spiego meglio.
    lancio il programma e mi crea il file con dentro scritto quello che gli dico io,
    a questo punto apro il file e ne modifico il contenuto, rilancio il programma e dove gli dico di posizionarsi con il cursore con il comando raf.seek(3) e li mi scrive caratteri tipo canji japponesi.
    ieri siamo letteralmente impazziti, poi siamo arrivati alla conclusione che poteva essere il sistema operativo visto che sul mio portatile ho vista premium....mi sapete dire con precisione se è quello e come posso eliminare il problema? posto il codice...

    public class MyFileReader {

    public static void main(String[] args)throws IOException{
    RandomAccessFile raf=new RandomAccessFile("path");
    long l =3;
    raf.seek(l);
    String s="kkk";
    raf.writeChars(s);
    raf.seek(0);
    int i=0;
    while(i<20){
    System.out.print(raf.read()+", ");
    i++;
    }

    }

    }

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

    Re: caratteri orientali nel file di testo

    Originariamente inviato da dom.vecchioni
    raf.writeChars(s);
    raf.seek(0);
    int i=0;
    while(i<20){
    System.out.print(raf.read()+", ");
    i++;
    }
    writeChars() scrive ogni singolo carattere come sequenza di 2 byte in formato big-endian (il byte più significativo per primo).
    read() invece legge 1 byte e basta. È chiaro che non va bene. Quando fai 'ste cose cerca sempre di fare scritture/letture "simmetriche". Usa ad esempio readChar() per leggere il singolo carattere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    fin li tutto ok hai perfettamente ragione e ho modificato, ma come mai i caratteri strani?
    anche dopo aver modificato?...

    1 cosa che non c'entra niente col codice ma col forum...cone si fa a postare il codice come voi?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dom.vecchioni
    fin li tutto ok hai perfettamente ragione e ho modificato, ma come mai i caratteri strani?
    anche dopo aver modificato?...
    Dipende cosa intendi per "strani". E dipende anche da dove intendi visualizzarli (console? componente grafico?) e con quale font.

    Originariamente inviato da dom.vecchioni
    cone si fa a postare il codice come voi?
    I tag [ CODE ] [ /CODE ] senza spazi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    io li visualizzo proprio all'interno del file di testo, mi vengono tutti canji giapponesi proprio all'interno del file,tipo:

    獵灥数㌠㜴㤯㌶㐷㤴

    tutti all'interno del file di testo, non appena faccio una modifica mi esce sta roba.....booooo.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dom.vecchioni
    io li visualizzo proprio all'interno del file di testo, mi vengono tutti canji giapponesi proprio all'interno del file,tipo:

    獵灥数㌠㜴㤯㌶㐷㤴

    tutti all'interno del file di testo, non appena faccio una modifica mi esce sta roba.....booooo.
    Alt ... allora bisogna fare un attimo il punto. Nel file tu scrivi caratteri in formato UTF-16 big-endian (quello che dicevamo prima, 2 byte per carattere). Fin qui è ok. Se lo devi visualizzare con un editor di testo chiaramente l'editor deve "sapere" che è in UTF-16 BE e non in ASCII o altro.

    A parte questo, se fai dei seek per riscriverci sopra, è chiaro che l'offset lo devi mettere in modo appropriato. Cioè non devi andare a scrivere in modo "sfalsato" rispetto alla coppia di byte. Non posso saperlo bene ma penso che tu parta a scrivere i caratteri fin dall'inizio del file. In tal caso sarebbe appropriato mettere all'inizio la sequenza BOM per indicare formato/endianness.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    come faccio ad inserirla nel codice?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dom.vecchioni
    come faccio ad inserirla nel codice?
    Il BOM serve principalmente agli editor di testo che lo "capiscono". Nel caso di uso di RandomAccessFile basta fare un writeChar(0xFEFF)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    mille grazie ora provo subito..... e poi ti dico...

  10. #10
    codice:
    funziona bene grazie mille andbin sei sempre molto chiaro e gentile.

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.