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

Entrée/Sortie Java Discussion :

problème Encodage ObjectOutputStream linux


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 132
    Par défaut problème Encodage ObjectOutputStream linux
    Salut à tous,
    Je vais essayer d'expliquer mon problème simplement.
    J'ai une page web qui upload un fichier txt sur un serveur. Ensuite je lit ce fichier avec un BufferedReader pour le mettre dans un StringBuffer et l'écrire dans un fichier binaire avec l'objet ObjectOutputStream.writeObject();.
    Une fois écris je dois relire ce fichier binaire pour modifier son format (nouveau format de date, etc,),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    this.ois = new ObjectInputStream(new FileInputStream(fichier));
                    StringBuffer strBufferFicEEDB = (StringBuffer)ois.readObject();
    Puis je dois redonner à l'utilisateur ce fichier au format texte.
    Mais le problème c'est que l'encodage de mon fichier n'est plus le même, les accents disparaisse, les tabulations, etc.
    Alors petite précision, ça fonctionne en local sur mon PC Windows, c'est à dire que les caractères ne change pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .04.2008|11111|00000061|12|TOTO|Stéphane
    alors que sur le serveur web Tomcat Linux, les caratères sont modifiés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    11111|00000061|TOTO|St?phane|M|0436|0436|?In

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Lorsque tu lis/écrit dans un fichier texte, tu dois préciser l'encodage sinon c'est un encodage par défaut qui sera utilisé.

    Pour cela il faut passer par un InputStreamReader...

    a++

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 132
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,
    Lorsque tu lis/écrit dans un fichier texte, tu dois préciser l'encodage sinon c'est un encodage par défaut qui sera utilisé.

    Pour cela il faut passer par un InputStreamReader...
    a++
    Donc si j'ai bien compris, il faut que j'utilise un OutputStreamWriter pour écrire mon fichier et InputStreamReader pour lire ce fichier ?

  4. #4
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Pour être exact l'encodage de ton fichier n'a pas changé, c'est plutôt que tu l'as manipulé avec un mauvais encoding. Typiquement, si tu utilises les méthodes qui ne prennent pas en compte l'encoding, java utilise celui par défaut de la VM. Sous Unix et Windows, cet encoding n'est pas le même par défaut évidemment (sinon ça serait trop simple )
    Donc attention à l'encoding utilisé de bout en bout, et donc à l'encoding du fichier uploadé que tu dois contraindre pour pouvoir le relire en java.

    Les manipulations binaires n'ont pas d'impact sur le fichier. Le problème doit provenir de la lecture du fichier uploadé dans ton StringBuffer.
    Sinon comme remarque, je ne vois pas l'utilité de sérialiser un StringBuffer sur disque, pourquoi ne pas simplement sauvegarder le texte ?

    [[damned, trop tard]]

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 132
    Par défaut
    Citation Envoyé par djsnipe Voir le message
    Sinon comme remarque, je ne vois pas l'utilité de sérialiser un StringBuffer sur disque, pourquoi ne pas simplement sauvegarder le texte ?
    [[damned, trop tard]]
    Tu as tout à fais raison mais je ne peut pas conserver le fichier texte de base sur le serveur car il s'agit de donné confidentielle.

    Je vais voir du coté du InputStreamReader.

  6. #6
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    OK je comprend la démarche pour la confidentialité. Toutefois, attention au niveau de confidentialité nécessaire. Désérialiser un StringBuffer n'est pas une tâche difficile pour une personne capable d'intercepter le fichier. Regarde plutôt du côté des API de cryptographie pour obtenir un niveau de sécurisation plus élevé.

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 132
    Par défaut
    Citation Envoyé par djsnipe Voir le message
    OK je comprend la démarche pour la confidentialité. Toutefois, attention au niveau de confidentialité nécessaire. Désérialiser un StringBuffer n'est pas une tâche difficile pour une personne capable d'intercepter le fichier. Regarde plutôt du côté des API de cryptographie pour obtenir un niveau de sécurisation plus élevé.
    Il suffit juste que le fichier ne soir pas lisible comme un fichier texte et c'est le cas en utilisant la méthode writeObject() de l'objectOutputStream.
    Par contre ça me pose certains problèmes d'encodage

  8. #8
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    OKI, mais ton problème ne provient pas de la relecture de ton fichier à priori car la sérialisation/désérialisation est assurée par java. Vérifie en débuggant que le contenu de ton StringBuffer est correct (avec les accents) avant sauvegarde.
    Si ton fichier est encodé en Cp1252 (windows), uploadé en binaire sur le serveur, la relecture en java sous forme d'une chaîne de caractère doit être fait en précisant l'encoding Cp1252, sinon java prendra donc l'encoding par défaut de ta VM, UTF-8 par défaut sous Unix si je ne dis pas de bétise.

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas writeObject() qui pose un problème d'encodage. Sauf erreur cela utilisera toujours de l'UTF8 sur tous les systèmes.


    Ton problème vient bien de la lecture/ecriture du fichier texte.

    • Si les fichiers proviennent d'un poste Windows, ils sont surement encodés en windows-1252 (une variante de l'ISO-8859-1)
    • Tu les lis avec l'encodage par défaut. Sous Windows c'est parfait car tu utilisera windows-1252, Mais sous Linux tu utiliseras de l'utf-8 pour lire un fichier windows-1252...

    Tu as déjà ton problème :
    • Sous Windows cela fonctionne parfaitement puis l'encodage est le même.
    • Sous Linux le texte que tu as chargé en mémoire est déjà corrompu...



    a++

    [edit] grillé
    Pour info Cp1252 == windows-1252

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/09/2006, 20h20
  2. Problème d´installation de Linux Mandriva
    Par Pyrhaa_666 dans le forum Matériel
    Réponses: 16
    Dernier message: 24/08/2006, 08h02
  3. [DOM] Problème encodage
    Par spilliaert dans le forum Format d'échange (XML, JSON...)
    Réponses: 19
    Dernier message: 05/06/2006, 16h26
  4. Probléme encodage caractéres spéciaux MYSQL
    Par FoxLeRenard dans le forum Installation
    Réponses: 1
    Dernier message: 20/02/2006, 12h10
  5. Réponses: 1
    Dernier message: 02/02/2006, 23h12

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