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

Langage Java Discussion :

Encodage de nom de fichier sous Linux


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 26
    Points
    26
    Par défaut Encodage de nom de fichier sous Linux
    Bonjour,
    J'ai des problème d'encodage avec mes nom de fichier linux, quelqu'un y a mis des é,è et à

    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
     
                                                    //je récupère l'nesemble de mes fichier
    						File [] files = currDir.listFiles();
                                                    // j'initialise un File pour contenir le document recherché
    						File document = null;
    						for (int i = 0; i < files.length; i++) {
                                                            //Je recherche le bon fichier
    							String name = files[i].getAbsolutePath();
    							String [] path = name.split("/");
    							String [] fileName = path[path.length - 1].split("_");
    							if (temp[0].equals(fileName[0])) {
    								document = files[i];
    								break;
    							}
    						}
                                                    //J'utilise mon document
    						contentWriter.putContent(document);
    et voila l'erreur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.io.FileNotFoundException: /app/alfresco-3.4.7/delivery/exportData/files/12345645_e792bc09-e0b0-4d7c-ba5e-b316b6e7d88d_FDM-EBA-�&H-001.odp (No such file or directory)
    et le nom du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345645_e792bc09-e0b0-4d7c-ba5e-b316b6e7d88d_FDM-EBA-é&H-001.odp
    Si quelqu'un a une idée =)

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 26
    Points
    26
    Par défaut
    Bon c'est linux qui ne digère pas très bien la string renvoyé par java. Quand je debug sous Eclipse on voit bien le "é" mais en sortie sur la console j'ai un truc dégeulasse!!!
    J'ai essayé de l'encoder en UTF-8 mais pas moyen ...

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    C'est effectivement un problème d'encodage.
    Java fait par défaut de l'UTF-16, et plusieurs distributions Linux utilisent l'UTF-8.
    Fait une recherche pour ta distribution, et ensuite spécifie cet encodage dans ton code Java.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 566
    Points : 21 635
    Points
    21 635
    Par défaut
    En principe c'est surtout une question de régler correctement la variable $LANG ou les variables $LC_quelquechose. Plus exactement, de ne pas les dérégler juste parce qu'on veut faire du Java, car par défaut ça marche très bien.

    L'ennui c'est quand quelqu'un crée un fichier avec un nom qui ne respecte pas cette variable $LANG par défaut qui marche bien : dans ce cas-là on ne peut pas s'en sortir avec les String et il faudrait plutôt utiliser des octets pour le nom de fichier... Et Java ne le propose pas.

    Moi, pour éviter les ennuis de ce genre, j'ai des processus en bash qui renomment les fichiers mal foutus en quelque chose qui ne pose pas de problème. On pourrait aussi envisager le développement d'une bibli JNI.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 26
    Points
    26
    Par défaut
    Merci de votre soutien!
    J'ai réussi faisant une étape intermédiare ou je remplace les caractères "bizarre" par leur code unicode!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Map<String, String> xml = getXml(temp[1], temp[0]);
    						String fileName = xml.get("fileName");
    						fileName = fileName.replaceAll("é", "\u00e9");
    						fileName = fileName.replaceAll("è", "\u00e8");
    						fileName = fileName.replaceAll("à", "\u00e0");
    						logger.debug(fileName);
    						contentWriter.putContent(new File(pathProperties.getProperty("filesPath") + temp[0] + "_" + temp[1] + "_" + fileName ));
    J'ai aussi ajouté des paramètres dans setenv.sh de tomcat mais je sais pas si c'est utile =)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
    export LANG="fr_FR.ISO-8859-1"
    export LC_ALL="fr_FR.ISO-8859-1"
    export LANGUAGE="fr_FR.ISO-8859-1"

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 566
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par lad86 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fileName = fileName.replaceAll("é", "\u00e9");
    fileName = fileName.replaceAll("è", "\u00e8");
    fileName = fileName.replaceAll("à", "\u00e0");
    En principe, ces trois lignes sont censées ne rien faire. Si elles font quelque chose, c'est que ton compilateur est mal configuré.

    En principe également, tes noms de fichiers tu les as obtenus avec File.listFiles(), et il n'y a donc rien à tenter pour les rendre "plus corrects" : Java les as déjà fournis sous la seule forme qui pourrait possiblement être acceptée. Mais parfois, ils ne peuvent pas être acceptés, point.

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

Discussions similaires

  1. Spécifier type de système de fichiers sous linux
    Par rond24 dans le forum Administration système
    Réponses: 4
    Dernier message: 07/03/2006, 20h09
  2. Téléchargement de fichier sous Linux
    Par patrick_lassaly dans le forum Administration système
    Réponses: 1
    Dernier message: 03/01/2006, 11h31
  3. fichier sous linux
    Par razord dans le forum C
    Réponses: 2
    Dernier message: 19/09/2005, 11h54
  4. Exclusivité sur un fichier sous linux
    Par ggnore dans le forum Administration système
    Réponses: 4
    Dernier message: 03/11/2004, 09h46
  5. Les fichiers sous linux/windows
    Par Stessy dans le forum Linux
    Réponses: 5
    Dernier message: 05/12/2003, 09h30

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