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

    caratteri non standart

    Buon giorno a tutto il forum,

    ho la necessità di leggere da un file che contiene caratteri cinesi e di stamparli sugli oggetti swing

    esempio: testo.setText(leggiFile("./cinese.txt")));

    mi stampa cose stranissime, tutto tranne il cinese,

    ho cercato sul web e ho trovato un metodo, ma il risultato è una serie di quadratini

    potete aiutarmi ?

    ciao a tutti,
    giancarlo

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

    Re: caratteri non standart

    Originariamente inviato da novainvicta
    ho la necessità di leggere da un file che contiene caratteri cinesi e di stamparli sugli oggetti swing

    esempio: testo.setText(leggiFile("./cinese.txt")));
    La prima domanda che ti devi fare (e che ti faccio io) è: quale charset/encoding viene usato nel file? UTF-8? UTF-16? Big-5? Altro?

    Senza sapere questa informazione, non puoi fare granché. Una volta che hai questa informazione, allora sappi che c'è la classe java.io.InputStreamReader a cui puoi specificare un apposito charset.

    Quindi crei un FileInputStream, lo incapsuli in un InputStreamReader e se devi leggere "a righe", a sua volta lo incapsuli in un BufferedReader. Questo tecnicamente si chiama "wrapping" (o "chaining")

    EDIT: a livello grafico, nella interfaccia utente, il problema poi è anche un altro. Il tuo sistema ha i font adatti per visualizzare i caratteri che ti interessano?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    grazie per la risposta

    mi sono fatto la stessa domanda e ho adattato un metodo preesitente

    public static String loadfile(String filename, String enc)throws IOException, UnsupportedEncodingException{
    String newline = System.getProperty("line.separator");
    String buffer;
    InputStream in = new FileInputStream(filename);
    //StringBuffer ris=new StringBuffer();
    String ris=null;
    // Set up character stream
    BufferedReader r = new BufferedReader(new InputStreamReader(in, enc));
    while ((buffer = r.readLine()) != null) {
    ris=buffer;// + newline;
    }
    r.close();
    return ris;
    }

    il carattere usato è il BIG5 spedito tramite parametro nel metodo

    e in effetti c'è stato un lieve cambiamento, da cartteri anomali a quadratini

    ed è qui che mi inchiodo... ho letto che swing dovrebbe già essere compatibile con il Big5

    per quanto riguarda il font, se navigo sul web con firefox, vedo tranquillamente siti in cinese questo mi fa pensare che il font sià già installato

    non ho ancora risolto il problema spero quindi in un aiuto,

    ciao a tutti,
    gaincarlo

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da novainvicta
    ho adattato un metodo preesitente

    public static String loadfile(String filename, String enc)throws IOException, UnsupportedEncodingException{
    String newline = System.getProperty("line.separator");
    String buffer;
    InputStream in = new FileInputStream(filename);
    //StringBuffer ris=new StringBuffer();
    String ris=null;
    // Set up character stream
    BufferedReader r = new BufferedReader(new InputStreamReader(in, enc));
    while ((buffer = r.readLine()) != null) {
    ris=buffer;// + newline;
    }
    r.close();
    return ris;
    }
    Questo metodo non è il massimo per quanto riguarda un corretto trattamento delle eccezioni. Non basta dichiararle nel throws. Che succede se readLine lancia una eccezione? Che in primo luogo r.close() non lo esegui.

    Poi cosa vuoi fare con il metodo? Leggere un intero file di testo e metterlo in un oggetto String. Non mi sembra che funzioni così il tuo metodo ... non vedo accodamenti. E comunque sarebbe altamente inefficiente accodare ogni volta a un String.

    Originariamente inviato da novainvicta
    il carattere usato è il BIG5 spedito tramite parametro nel metodo
    Ok, Big-5 è il charset adatto per il "traditional chinese".

    Originariamente inviato da novainvicta
    ed è qui che mi inchiodo... ho letto che swing dovrebbe già essere compatibile con il Big5
    Swing non c'entra nulla con i vari charset (Big-5, ISO-8859-1, ecc...). Java supporta da sempre il set di caratteri Unicode e basta, i 'char' sono a 16 bit e rappresentano caratteri in UTF-16.

    Originariamente inviato da novainvicta
    per quanto riguarda il font, se navigo sul web con firefox, vedo tranquillamente siti in cinese questo mi fa pensare che il font sià già installato
    Beh, bisogna vedere.
    Compila e prova questo codice:

    codice:
    import javax.swing.*;
    
    public class Prova
    {
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable ()
            {
                public void run ()
                {
                    JFrame frame = new JFrame ("Prova carattere");
                    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
                    frame.setSize (200, 200);
    
                    JLabel label = new JLabel ("\u8C93");
                    label.setFont (label.getFont ().deriveFont (60.0f));
                    frame.add (label);
    
                    frame.setVisible (true);
                }
            });
        }
    }
    Se vedi il carattere

    allora il sistema è in grado di visualizzare i caratteri cinesi (per inciso, il carattere sopra vuol dire "gatto" in cinese .... ma non chiedermi come si pronunci :P )

    Il carattere sopra (vedi il codice nel sorgente) è il carattere Unicode U+8C93. Come sia codificato in Big-5, non lo so. Quando lavori con le stringhe in Java, non c'entra più nulla il Big-5 o altro ... ma solo l'Unicode è importante.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.