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

Python Discussion :

editer un fichier en UTF-8


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut editer un fichier en UTF-8
    Bonjour,

    j'automatise une édition de fichier XML à partir de données présente en base.

    Une fois le fichier créé, mon script lance une commande maven permettant à mon appli web de prendre en compte les données du fichier XML.

    Une fois le fichier parsé, j'ai un problème d'encodagem les "é" remplacé par "?".

    Voici ce que j'ai essayé de faire et qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MonFichier=open(repertoire + '/toto.xml','w')
     
    MaVar = """ du texte """
     
    MonFichier.write(MaVar .encode('UTF-8')) 
     
    MonFichier.close()
    Quand, dans notepad, je passe l'encodage du fichier en UTF-8 manuellement, mon problème est résolu.

    Merci d'avance pour votre aide !

    Manu

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tu enregistres ton fichier avec l'extension .xml, Notepad attendait sans doute la déclaration d'encodage et, à défaut, a choisit ascii.

    Si tu ajoutes cet entête à ton fichier, ça donne quoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version="1.0" encoding="UTF-8"?>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut
    si je rajoute cette entete, maven me jette en declarant que le mot "UTF-8" ne doit pas etre utilisé dans mon fichier.

    C'est vraiment a cause de l'encodage car si je l'encode manuellement en UTF8 et que je relance ma tache maven, tout se passe bien et mon texte est bien encodé.

    Je vais essayer comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonFichier.write(MaVar).encode('UTF-8')
    alors que je faisais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonFichier.write(MaVar .encode('UTF-8'))
    car c'est plus le fichier qu'on encode que la variable texte.

    Je te tiens au courant.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut
    non, dans ce cas c'est une erreur

  5. #5
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Hehe, non, on encode pas un fichier, on encode un str, en python*!

    Il faut comprendre qu’un fichier est toujours, in fine, des bytes (ou octets). Quand python ouvre un fichier en mode texte, il va implicitement faire les conversions bytes→str (en lecture) ou str→bytes (en écriture), en utilisant l’encodage par défaut du système (utf-8 sous la plupart des *nix, un truc genre cp-12xx sous windaube…).

    Si on reprend ton premier exemple, pour être sûr d’enregistrer MaVar en utf-8, tu as deux solutions*:

    1) Tu précises quel encodage utiliser lors de l’ouverture du fichier en écriture*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaVar = """ du texte """
     
    with open(repertoire + '/toto.xml', 'w', encoding="utf-8") as MonFichier: 
        MonFichier.write(MaVar) 
    # pas besoin de MonFichier.close() avec with…:
    2) Tu ouvres ton fichier en mode binaire ('wb'), et tu assures toi-même l’encodage de ta str en bytes*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaVar = """ du texte """
     
    with open(repertoire + '/toto.xml', 'wb') as MonFichier: 
        MonFichier.write(MaVar.encode("utf-8")) 
    # pas besoin de MonFichier.close() avec with…:
    Attention, tout ce qui précède est en py3, py2 était encore plus pénible dans la gestion chaîne de texte/d’octets…

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut
    merci mont !

    content de t'avoir fais rire

    le script que je fais est en jython (java for python) et je crois bien que ce n'est pas compatible py3.

    La syntaxe "with open" ne marche pas.
    J'ai lancé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    repertoire = 'C:/temp'
    MaVar = """ régle de fou ça """
     
    MonFichier = open(repertoire + '/toto.xml','wb')
    MonFichier.write(MaVar.encode("utf-8")) 
    MonFichier.close()
    Quand j'ouvre le fichier avec notepad, onglet encodage, il est en "UTF-8 sans BOM"

    et le texte est le suivant :

    On y est presque mais c'est pas encore ça

    Bon week end

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

Discussions similaires

  1. [C#]Edition de fichiers office dans une winform
    Par cyrille_naert dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/01/2007, 16h50
  2. Export d'une base MySQL vers un fichier texte UTF-8
    Par zian974 dans le forum Outils
    Réponses: 2
    Dernier message: 28/08/2006, 20h36
  3. [FTP] Editer des fichiers distants
    Par bigtof dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 17/08/2006, 00h28
  4. ecrire un fichier en utf-8
    Par elzedo dans le forum Langage
    Réponses: 10
    Dernier message: 09/03/2006, 22h12
  5. [XML-JSP] Editer un fichier XML
    Par sempire dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/08/2005, 22h24

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