Lettere accentate documento di testo

di il
16 risposte

Lettere accentate documento di testo

Vorrei fare un documento di testo con java dove scrive ad un certo punto "è" solo che al posto di "è" viene una lettera strana. Soluzione?

16 Risposte

  • Re: Lettere accentate documento di testo

    Devi usare il corretto ENCODING sia in letture che in scrittura

    Windows-1252 OPPURE UTF-8

    Se usi encoding diversi, vedrai sempre schifezze
  • Re: Lettere accentate documento di testo

    fifififi ha scritto:


    vorrei fare un documento di testo con java dove scrive ad un certo punto "è" solo che al posto di "è" viene una lettera strana. Soluzione?
    È tutta questione di charset, set di caratteri, specialmente per tutti i caratteri oltre il ASCII standard. E non è una cosa banale. Non conta solo il fatto che lato Java devi usare le classi di I/O a cui si può specificare un charset .... ma conta anche come e dove aprirai il documento al di fuori di Java!

    Se da Java scrivi un file in UTF-8 (è un encoding del Unicode) ma poi lo apri o visualizzi su console, molto probabilmente vedrai di nuovo schifezze (sicuramente su Windows, dato che la console è "limitata" sul fronte charset).
    Idem se lo apri con Notepad, Notepad++, PsPad o altro editor di testo puro. Potrebbero essere impostati per usare un charset differente e tu continueresti a vedere schifezze ...
  • Re: Lettere accentate documento di testo

    andbin ha scritto:


    fifififi ha scritto:


    vorrei fare un documento di testo con java dove scrive ad un certo punto "è" solo che al posto di "è" viene una lettera strana. Soluzione?
    È tutta questione di charset, set di caratteri, specialmente per tutti i caratteri oltre il ASCII standard. E non è una cosa banale. Non conta solo il fatto che lato Java devi usare le classi di I/O a cui si può specificare un charset .... ma conta anche come e dove aprirai il documento al di fuori di Java!

    Se da Java scrivi un file in UTF-8 (è un encoding del Unicode) ma poi lo apri o visualizzi su console, molto probabilmente vedrai di nuovo schifezze (sicuramente su Windows, dato che la console è "limitata" sul fronte charset).
    Idem se lo apri con Notepad, Notepad++, PsPad o altro editor di testo puro. Potrebbero essere impostati per usare un charset differente e tu continueresti a vedere schifezze ...
    Per Windows, l'ENCODING di Default e' il Windows-1252.
  • Re: Lettere accentate documento di testo

    migliorabile ha scritto:


    Per Windows, l'ENCODING di Default e' il Windows-1252.
    Lo so benissimo ... non lo devi chiarire a me.
    Sulla console di Windows il default, perlomeno da quanto vedo sul mio PC, è il charset CP-850, che è ancora peggio del Win-1252.
  • Re: Lettere accentate documento di testo

    E come si fa a fare questa cosa?
  • Re: Lettere accentate documento di testo

    fifififi ha scritto:


    e come si fa a fare questa cosa?
    Ci sono diverse classi di I/O che permettono di specificare un charset in modo esplicito, basta che guardi i loro costruttori.

    OutputStreamWriter(OutputStream out, String charsetName)
    PrintStream(File file, String csn)
    PrintStream(OutputStream out, boolean autoFlush, String encoding)
    PrintStream(String fileName, String csn)
    PrintWriter(File file, String csn)
    PrintWriter(String fileName, String csn)

    Quindi esempio al volo:
    import java.io.PrintWriter;
    
    public class Prova {
        public static void main(String[] args) throws Exception {
            PrintWriter pw = new PrintWriter("prova.txt", "UTF-8");
            pw.print("Oggi \u00E8 bello");
            pw.close();
        }
    }
    Ed ho usato \u00E8 (escape Unicode per la "è") solo per evitare ulteriori problemi di encoding anche nel sorgente.
  • Re: Lettere accentate documento di testo

    Ho provato non va comunque quelo che devo fare. Non fa nulla, mi arrangio, grazie cmnq.
  • Re: Lettere accentate documento di testo

    fifififi ha scritto:


    ho provato non va comunque quelo che devo fare. Non fa nulla, mi arrangio, grazie cmnq.
    Non va cosa? Come? Scusa ma così non è molto chiaro.
    Innanzitutto devi stabilire con COSA (come sw) verrà letto il documento prodotto da Java e anche che cosa ci devi scrivere dentro. Solo al massimo lettere accentate? o anche caratteri cirillici? simboli matematici? lettere greche? altro?
    A quel punto puoi stabilire quale charset utilizzare, se quello predefinito della piattaforma oppure uno specifico.
  • Re: Lettere accentate documento di testo

    Ciao a tutti,
    quindi intendete dire che NON è più possibile avere una nazionalizzazione dell'output a video (sto parlando di italiano ovviamente) con un semplice comando DOS da includere magari in una variabile ambiente come si faceva anni e anni fa con KEYBIT, prima e KEYB IT successivamente?
  • Re: Lettere accentate documento di testo

    fulviot66 ha scritto:


    quindi intendete dire che NON è più possibile avere una nazionalizzazione dell'output a video (sto parlando di italiano ovviamente) con un semplice comando DOS da includere magari in una variabile ambiente come si faceva anni e anni fa con KEYBIT, prima e KEYB IT successivamente?
    Sinceramente, non ho compreso il tuo dubbio. La discussione è incentrata principalmente sulle questioni legate ai charset che sono spesso critiche e subdole. Se poi parliamo della scrittura su una "console" .... non va certamente meglio, perlomeno su Windows dove è tradizione usare i "code page" che sono set single-byte e quindi estremamente limitati.
    Precisa meglio il tuo dubbio.
  • Re: Lettere accentate documento di testo

    Il mio dubbio?
    Semplicemente ho trovato dei sorgenti Java dove in un'istruzione di stampa ci sono dei caratteri accentati, come segue
    ...
    System.out.println("é scritto");
    ...
    ma quando lo esegui da console, ottieni al posto della é con l'accento 2 caratteri una A maiuscola con una tilde sopra e una c minuscola dentro ad un cechietto (forse il simbolo del copyright).

    Significa che per avere un output a video corretto devo per forza usare il relativo carattere unicode \u seguito dal numero corrispondente?
  • Re: Lettere accentate documento di testo

    fulviot66 ha scritto:


    Semplicemente ho trovato dei sorgenti Java dove in un'istruzione di stampa ci sono dei caratteri accentati, come segue
    ...
    System.out.println("é scritto");
    ...
    ma quando lo esegui da console, ottieni al posto della é con l'accento 2 caratteri una A maiuscola con una tilde sopra e una c minuscola dentro ad un cechietto (forse il simbolo del copyright).

    Significa che per avere un output a video corretto devo per forza usare il relativo carattere unicode \u seguito dal numero corrispondente?
    Allora iniziamo a distinguere due aspetti.

    Aspetto 1)
    Il sorgente è un file di TESTO, codificato fisicamente nel file secondo un certo charset. Questo charset deve anche essere noto al compilatore, che dovrà ovviamente leggere il sorgente. Se il sorgente è in UTF-8, il compilatore javac del JDK (o quello interno di un IDE o chi per esso) DEVE essere informato del fatto che il sorgente è in UTF-8.

    Se usi un IDE (es. Eclipse) generalmente questo è già di norma ragionevolmente a posto, anche perché un IDE tipicamente ha un buon default tipo UTF-8 o al limite il charset predefinito del S.O. Comunque essendo l'IDE "integrato" con editor e compilatore, è ragionevole pensare che il charset usato per salvare il sorgente è lo STESSO usato per la compilazione.

    Se invece scrivi il sorgente con un normale editor (Notepad++, PsPad, SublimeText, ecc..) e poi compili "a mano" con il javac del JDK .... questo aspetto NON è così scontato. Devi sapere quale charset usa l'editor e se non è lo stesso di quello predefinito del S.O., devi specificarlo a javac con l'opzione -encoding

    Comunque, se alla fine di tutto nel "bytecode", nel file .class, la "é" è codificata nel codepoint Unicode U+00E9 allora è corretto, A POSTO e su questo non ci sono altre questioni.

    Aspetto 2)
    A runtime la stringa sarà stampata da qualche parte. Dove? Nella console di un IDE? Nella console "reale" di un S.O.? In un componente grafico AWT/Swing?

    Quindi subentrano altre questioni: possibili limitazioni dell'ambiente in cui il testo viene stampato ed anche questioni sul "font" di carattere (es. "Arial", "Courier New" ecc..) usato.
    Se parliamo di una console "reale" di un S.O. Ms Windows, le limitazioni ci sono, perché lì tipicamente viene usato un set "code page" che è single-byte.

    Fin qui è tutto chiaro?
  • Re: Lettere accentate documento di testo

    Sì, grazie.
  • Re: Lettere accentate documento di testo

    fulviot66 ha scritto:


    Sì, grazie.
    Bene, ora prova questo:
    public class Prova {
        public static void main(String[] arg) {
            String str = "\u00E0 \u00E8 \u00EC \u00F2 \u00F9";   // lettere aeiou accentate
    
            System.out.printf("%s%n", str);
            System.console().printf("%s%n", str);
        }
    }
    Ho usato gli escape Unicode solamente per evitare ulteriori problemi/dubbi a livello di charset del sorgente.

    Compila ed avvia su un Windows in una console di sistema .... ed osserva se c'è/quale è la differenza. P.S. potresti anche non vedere differenze, dipende da alcuni fattori, e anche dalla versione del runtime Java.
Devi accedere o registrarti per scrivere nel forum
16 risposte