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

API standards et tierces Java Discussion :

Les titres des fichiers perdent leurs accents pendant le zip.


Sujet :

API standards et tierces Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut Les titres des fichiers perdent leurs accents pendant le zip.
    Bonjour,

    J'ai un petit problème lorsque je crée un fichier ZIP à partir de fichiers ayant des caractères spéciaux dans le nom du fichier (accents ou C-cédille).
    Par exemple :
    "Jean-François Stévenin.jpg" devient dans le fichier zip : "Jean-Fran+ºois St+®venin.jpg"

    Lorsque je dé-zip ce fichier j'obtiens hélas le nom modifié.
    Voici le code qui me permet de créer un fichier ZIP à partir d'une liste. C'est une classe que j'ai adaptée à partir d'un code trouvé sur un forum.
    Cela marche parfaitement bien si ce n'est ce problème de caractères spéciaux. Je pense qu'il faut que je précise quelque part le code (utf ou ISO-...) mais je ne sais pas comment.
    Merci d'avance pour tout conseil ou commentaire


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
     
    public class ZipFiles {
     
    	public static void CreateZip(String dir, String[] liste)   // la liste de fichier doit être passée dans un tableau de strings. 
    	{
    		try 
    		{
    			FileOutputStream fos = new FileOutputStream(  "./work/"+ "Cinephil_Import.zip");
    			ZipOutputStream zos = new ZipOutputStream(fos);
    			for (int i=0; i< liste.length;i++)
    			{   
            	   String fileName =   "Work/"+liste[i];
                   	   addToZipFile(fileName, zos);
    			}
    			zos.close();
    			fos.close();
    		} 
    		catch (FileNotFoundException e) {e.printStackTrace();} 
    		catch (IOException e) {	e.printStackTrace();}
    	}
     
    	public static void addToZipFile(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException {
     
    		System.out.println("Writing '" + fileName + "' to zip file");
     
    		File file = new File(fileName);
    		FileInputStream fis = new FileInputStream(file);
    		ZipEntry zipEntry = new ZipEntry(fileName);
    		zos.putNextEntry(zipEntry);
     
    		byte[] bytes = new byte[1024];
    		int length;
    		while ((length = fis.read(bytes)) >= 0) {
    			zos.write(bytes, 0, length);
    		}
     
    		zos.closeEntry();
    		fis.close();
    	}
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 097
    Par défaut
    Peut être qu'il faut rajouter l'encodage comme paramètre du ZipOutputStream, mais je ne peux pas te l'affirmer :

    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Effectivement, tu as un constructeur d'outpustream te permettant de passer un charset: essaie ISO-8859-1 ou Cp437.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    Entre-temps j'avais également vu que j'avais la possibilité de définir un charset pour ZipOutputStream,

    j'en avais essayé plusieurs en particulier ISO-8859-1, mais cela n'était pas satisfaisant. J'avais trouvé : "IBM863" qui marche très bien. Comme suggéré je viens de tester avec "Cp437" et cela marche également. Je pense que j’utiliserai ce dernier car je ne suis pas certain que IBM863 marche sur toutes plates-formes. Il faut que je teste par exemple sur un MAC OS/X (je développe sous Windows).

    Merci à vous deux pour vos réponses, qui m'ont permis de résoudre mon problème.

    Gégé

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En théorie le format ZIP n'accepte que cp437 ou utf-8.

    En pratique la plupart des outils ne gèrent pas cela correctement, et soit ils ne se posent aucune question sur l'encodage et ça ne marche que parce qu'en général on met juste des lettres sans accent, soit ils ne gèrent que cp437.

    A priori quand on a des problèmes de ce genre, il vaut mieux utiliser cp437. Mais parfois on travaille juste avec un autre programme qui ne sait pas du tout gérer les accents et ce qu'il faut faire c'est exactement ce qu'il veut, en cherchant à tâtons.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    OK merci pour ces info supplémentaires

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/03/2010, 15h51
  2. Les accents sur les noms des fichiers passent mal
    Par fab53 dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2008, 15h05
  3. Récupérer les corps des messages et leurs fichiers joints...
    Par Leobaillard dans le forum Composants VCL
    Réponses: 13
    Dernier message: 02/05/2006, 01h24
  4. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 17h49

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