Carattere è

di il
17 risposte

Carattere è

Ciao Ragazzi, ho un piccolo problema nella codifica.
Salvo un file.txt col nome cieè.txt,se l'application gira su windows, il file viene creato correttamente, se invece l'application gira su linux, il file viene salvato col nome cieè.txt.

Ho provato a settare l'enconding su JBOSS 5.1 dentro al file server.xml, ho provato a fare un replaceAll, ho provato a mettere l'enconding utf-18 sulla servlet ma niente di niente

qualcuno sa aiutarmi?
Grazie mille.

17 Risposte

  • Re: Carattere è

    Xenoriss ha scritto:


    Ciao Ragazzi, ho un piccolo problema nella codifica.
    Salvo un file.txt col nome cieè.txt,se l'application gira su windows, il file viene creato correttamente, se invece l'application gira su linux, il file viene salvato col nome cieè.txt.
    Le problematiche su encoding/charset non sempre sono "facili", anche perché spesso l'errore è "subdolo" oppure coinvolge più ambienti/contesti differenti.
    Quindi bisogna andare per gradi.

    Il nome del file ce l'hai in un oggetto String, giusto? Mi pare (salvo casi particolari) scontato. Il contenuto della stringa è corretto? Se nella stringa hai un carattere accentato es. 'è', esso deve avere il codice Unicode U+00E8 ovvero valore 232 decimale o 0xE8 esadecimale.

    Su linux dove hai il problema, è corretto così? Se non lo è, allora il problema è a "monte", ovvero come viene ottenuto/composto il nome del file.
  • Re: Carattere è

    Ciao andbin,
    Grazie della risposta. Allora il nome del file lo prendo da FormFile di struts, comunque si è una stringa. Praticamente ho salvato sul desktop un file.txt col nome che contiene delle lettere accentate, poi vado sulla web app installata su una macchina linux carico il file e sul server linux mi ritrovo il file salvato col nome composto da questi caratteri sporchi. è se contiene il nome una è, à se contiene una à.

    Se installo la stessa web app su un ambiente windows, (in questo caso sarebbe il mio locale) questo non si verifica. Viene salvato correttamente il nome del file con le lettere accentate.
  • Re: Carattere è

    Xenoriss ha scritto:


    Ciao andbin,
    Allora il nome del file lo prendo da FormFile di struts, comunque si è una stringa.
    E ripeto: hai controllato come è la stringa? quali char contiene?
  • Re: Carattere è

    Si la stringa contiene è ... o forse non volevi sapere questo ?
  • Re: Carattere è

    Ho fatto un'altra prova commentando l'upload.

    String name = ciaoè";
    System.out.println("nome file: " +name);

    mi stampa
    nome file: ciaoè

    Ripeto sempre e solo su linux ... su windows funge
  • Re: Carattere è

    Xenoriss ha scritto:


    String name = ciaoè";
    System.out.println("nome file: " +name);

    mi stampa
    nome file: ciaoè
    Anche se dire "mi stampa" non è molto chiaro/utile, nel senso che se stampi su una console (quale?) anche lì ci possono essere "grane" con il charset, comunque quello che già avevo pensato prima è che in realtà nel tuo String hai già i caratteri "malformati", ovvero con il tuo esempio attuale tu hai 6 caratteri e non 5:

    'c'
    'i'
    'a'
    'o'
    'Ã'
    '¨'

    E questo generalmente vuol dire una cosa abbastanza chiara: che il problema è a monte ovvero come/da dove viene ricevuta la stringa.

    Il nome dove lo inserisce l'utente? in un form in una pagina web? come è fatto il form? Specifica un charset esplicito oppure no? Quello è un punto "critico".
  • Re: Carattere è

    Allora l'ultimo test che ho fatto non passo per nessun form. Nel web.xml della mia applicazione come intestazione ho messo

    <?xml version="1.0" encoding="UTF-8"?>

    quindi ho settato l'encoding UTF-8. Come pagina iniziale ci sta una semplice index.jsp che al suo interno fa una redirect verso una action di struts. In questa action di strtus salvo banalmente un file txt vuoto.
    
    
    String nomeFile = "ciaoè.txt";
    File file = new File("/usr/test/"+nomeFile);
    file.createNewFile();
    
    Se entro poi con winscp o putty e vado nella directory usr/test, mi ritrovo questo file vuoto col nome

    ciaoè.txt

    Spero che mi sia spiegato bene ...
  • Re: Carattere è

    'è' è la codifica UTF8 del carattere 'è'

    Consiglio: mai usare caratteri strani nei nomi di file. Usare solo i caratteri ASCII

    Il problema e' ovvio: sotto Linux il nome del file viene preso cosi' come e' scritti, mentre in Windows viene fatta la conversione corretta.

    Il file serializzato, poiche' viene serializzato in UTF8, contiene appunto i due caratteri incriminati, convertiti nel carattere corrispondente dal editor
  • Re: Carattere è

    Ciao migliorabile.
    E lo so che sarebbe meglio non usare questi caratteri...però ho la necessità che se per qualche motivo assurdo ci sia di mezzo una è non si verifico questo problema .

    Come potrei risolvere ???
  • Re: Carattere è

    La soluzione piu' banale e' convertire i caratteri strani in '_' ad esempio.

    Quella piu' seria,... ci devo pensare
  • Re: Carattere è

    Convertire intendi facendo una sorta di replaceAll?
  • Re: Carattere è

    Xenoriss ha scritto:


    Nel web.xml della mia applicazione come intestazione ho messo

    <?xml version="1.0" encoding="UTF-8"?>
    Questo non centra nulla con il tuo problema ... è solo la codifica del file web.xml in sé.
    
    String nomeFile = "ciaoè.txt";
    File file = new File("/usr/test/"+nomeFile);
    file.createNewFile();
    
    Se tu hai scritto questo codice così e a runtime l'oggetto String risultante è già malformato lì in quella stringa allora .... vuol dire una (sola) cosa molto, molto ben precisa. Ovvero che l'editor ha salvato il sorgente con un certo charset mentre poi il compilatore lo considera con un altro charset.

    E posso anche azzardare ....
    L'editor salva il sorgente in UTF-8, quindi nel file fisicamente ci sono i caratteri ciaoè.txt
    E poi il compilatore lo tratta come ASCII o più presumibilmente come ISO-8859-1 che è un charset single-byte, quindi invece di 'è' hai appunto 2 caratteri.
  • Re: Carattere è

    Grazie andbin,
    che soluzione potrei effettuare?
  • Re: Carattere è

    Xenoriss ha scritto:


    Grazie andbin,
    che soluzione potrei effettuare?
    Verificare il charset che usa l'editor per salvare il sorgente e vedere il charset che usa il compilatore. Se usi un IDE, entrambe le cose hanno sicuramente una qualche "opzione" configurabile.
Devi accedere o registrarti per scrivere nel forum
17 risposte