IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 2 Java Discussion :

Upload de fichier & Encodage


Sujet :

Struts 2 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut Upload de fichier & Encodage
    Hello. J'ai un souci par rapport a l'encodage des fichiers uploadés.
    L'upload fonctionne très bien. Mais si mon application fonctionne tout en UTF8 et que dans le fichier les données sont encodé en ISO j'ai des erreurs.
    Comment récupéré l'encodage de mon fichier et faire en sorte que les données soit correctement intégré dans ma BDD.

    Ici je suis travail dans le cas de l'intégration dans la BDD des données a partir d'un fichier CSV.

    Voici le code de mon formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <s:form action="save" method="post" enctype="multipart/form-data">
    	<s:file name="monFichier" label="File" />
    	<s:submit />
    </s:form>
    Dans ma class mappé avec l'action j'ai ma méthode save dans laquelle je trouve ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FileInputStream fis;
    BufferedReader bufferedReader;
     
    fis = new FileInputStream(monFichier.getAbsolutePath());
    bufferedReader = new BufferedReader(new InputStreamReader(fis));
    while ((line = bufferedReader.readLine()) != null) {
      // Recuperation de chaque ligne et travail sur la ligne...
    }
    Mon InputStreamReader prend donc en paramètre mon FileInputStream et il peut aussi prendre un encoding. Mais je ne sais pas comment le lui fournir.
    Une idée?

  2. #2
    Membre chevronné Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
            BufferedReader in = new BufferedReader(
                new InputStreamReader(new FileInputStream("infilename"), "ISO-8859-1"));
            String str = in.readLine();
        } catch (UnsupportedEncodingException e) {
        } catch (IOException e) {
        }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut
    Citation Envoyé par JoloKossovar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
            BufferedReader in = new BufferedReader(
                new InputStreamReader(new FileInputStream("infilename"), "ISO-8859-1"));
            String str = in.readLine();
        } catch (UnsupportedEncodingException e) {
        } catch (IOException e) {
        }
    Oui comem je disais on peut donner un encodage en paramètre. Mais celui-ci va sans doute varier. Donc moi ce que je veux c'est recuperer l'encodage du fichier et le donner en paramètre (au lieu d'avoir un encodage en dur).
    C'est possible non de recuperer l'encodage du fichier?

  4. #4
    Membre chevronné Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Par défaut
    Je ne pense pas que tu puisse connaitre l'encodage de ton fichier. Si ton encodage varie dans les fichiers ( ce qui serait pas de bol ), il faudra que tu trouve un moyen de fournir le bon encodage a ton FileInputStream.

    Tu peux toujours essayer la méthode getEncoding() sur ton InputFileInputStream mais je doute vraiment que ce soit concluant.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut
    j'ai trouvé du code en souk là:
    http://listes.admisource.gouv.fr/pip...er/000096.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	private static String getFileEncoding(File f) throws IOException {
    		String ret = null;
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
    		byte[] bb = new byte[255];
    		bis.read(bb);
    		bis.close();
    		String buff = new String(bb);
    		ret = getEncoding(buff);
    		if (ret == null) {
    			ret = (new InputStreamReader(new FileInputStream(f))).getEncoding();
    		}
    		return ret;
    	}
    Mais sur la fonction getEncoding il y a un souk pas possible (vu qu'il y a eu des merge ou je sais pas quoi) bref c'est illisble mais je pense qu'il y a quelque chose là dedans d'intéressant. je ne capte pas tout je suis un peu noob.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private static String getEncoding(String buff) {
    +        String ret = null;
             buff = buff.substring(buff.indexOf("<?"));
             buff = buff.substring(0,buff.indexOf("?>")+2);
             String header = buff;
    @@ -817,24 +836,26 @@
                     if(s.indexOf(' ')>0) ret = s.substring(0,s.indexOf(' '));
                     else ret = s;
                 }
    -        } else {
    -            ret = (new InputStreamReader(new FileInputStream(f))).getEncoding();
             }
    -        bis.close();
             logger.debug("encoding="+ret);
             return ret;
         }
    Edit : En fait ca ca marche pour du XML...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut
    En tout cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fis = new FileInputStream(fichier.getAbsolutePath());
    InputStreamReader tempInputStreamReader = new InputStreamReader(fis);
    System.out.println("tempInputStreamReader encoding : " + tempInputStreamReader.getEncoding());
    Me renvoi UTF8 au lieu d'ISO

  7. #7
    Membre chevronné Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Par défaut
    cette methode que tu as trouvé la, c'est pour récupérer un encoding dans un fichier ou l'encoding est présent dans l'entete du fichier, comme par exemple un fichier xml ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    buff = buff.substring(buff.indexOf("<?"));
    buff = buff.substring(0,buff.indexOf("?>")+2);
    la en fait tu récupere le contenu du header, ce qu'il y a entre <? et ?> et souvent il y a l'encoding ici .. Mais dans ton cas, hors de question de le récupéré comme ca ^^ L'encoding n'est pas marqué en dur dans tes fichiers je suppose ?
    Si oui, tu pourras le recupéré, sinon tu l'as dans le baba (avec cette solution du moins)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut
    Oui c'est ce que je disais dans mon edit. Moi j'ai a faire avec un fichier .csv.
    je suis foutu...

  9. #9
    Membre chevronné Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Par défaut
    Ben pas forcément mais faut contourner le probleme
    Tu tombera surement sur des fichiers en UTF-8 et peut etre en ISO-8859-1 (et encore c pas sur), donc il faut que tu trouve un moyen de lever une exception si ton encodage n'est pas bon et de relancer le parsing avec un encodage différent.

    Par exemple, tu essaie en UTF-8, si il y a un probleme tu leves une exception et tu recommences mais avec du ISO-8859-1.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut
    Ok. Je vais voir si c'est faisable. En tout cas c'est la loose pour récuperer l'encodage d'un fichier...

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. Upload de fichier par XMLHTTP
    Par Immobilis dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 17h02
  3. upload de fichier
    Par 120 dans le forum ASP
    Réponses: 16
    Dernier message: 21/06/2004, 12h07
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo