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 :

Problème d'encodage des fichiers [Python 2.X]


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 88
    Points : 63
    Points
    63
    Par défaut Problème d'encodage des fichiers
    Bonjour

    j'ai un problème d'encodage sur un fichier XML

    je souhaite transformer le é par é et les autres caractère avec des accents dans la génération d'un fichier XML

    voici mon code

    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
     
    import os
     
    serie_xmltv = "é"
    titre_xmltv = "Coucou"
     
     
     
    path_guide = (os.path.join('/var/www/html'))
    guide_xml = (os.path.join(path_guide , 'guide2.xml'))
     
    fichier_guide_xml = open(guide_xml, 'w')
    fichier_guide_xml.write('<?xml version="1.0" encoding="utf-8"?>\n')
    fichier_guide_xml.write('<!DOCTYPE tv SYSTEM "xmltv.dtd">\n')
    fichier_guide_xml.write('<tv generator-info-name="sargasses-epg" generator-info-url="">\n')
    fichier_guide_xml.write('  <channel id="chaine">\n')
    fichier_guide_xml.write('    <display-name>chaine</display-name>\n')
    fichier_guide_xml.write('  </channel>\n')
     
     
    fichier_guide_xml.write('<programme start="??" stop="??" channel="??">\n')
    fichier_guide_xml.write('                <title>%s</title>\n' %serie_xmltv)
    fichier_guide_xml.write('                <sub-title>%s</sub-title>\n' %titre_xmltv)
    fichier_guide_xml.write('                <desc></desc>\n')
    fichier_guide_xml.write('                <category></category>\n')
    fichier_guide_xml.write('                <length units="minutes"></length>\n')
    fichier_guide_xml.write('                <video><aspect></aspect></video>\n')
    fichier_guide_xml.write('                <audio><stereo></stereo></audio>\n')
    fichier_guide_xml.write('        </programme>\n')
     
    fichier_guide_xml.write('</tv>')
    fichier_guide_xml.close()
    merci de votre aide

    Cordialement

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par www.rubis Voir le message
    je souhaite transformer le é par é et les autres caractère avec des accents dans la génération d'un fichier XML
    voici mon code
    Transformer le "é" en "é", c'est "encoder" de l'Unicode en UTF-8.
    Pour cela, il faut que vos chaines de caractères (et littéraux) soient Unicode et que l'encoding soit précisé à l'ouverture du fichier.
    Ce qu'on peut faire simplement via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from __future__ import unicode_literals
    import codecs
    ...
    fichier_guide_xml = codecs.open(guide_xml, 'w', encoding='utf-8')
    Voir le how-to Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 88
    Points : 63
    Points
    63
    Par défaut
    merci pour votre réponse

    Ca ne fonctionne pas
    j'ai un message d'erreur (je suis sous python 2.7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "./test6.py", line 13
        serie_xmltv = "é"
    SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xe9 in position 0: unexpected end of data

    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
     
    import os
    import sys
    from __future__ import unicode_literals
    import codecs
     
     
     
     
    serie_xmltv = "é"
    titre_xmltv = "Coucou"
     
     
     
    path_guide = (os.path.join('/var/www/html'))
    guide_xml = (os.path.join(path_guide , 'guide2.xml'))
     
    fichier_guide_xml = codecs.open(guide_xml, 'w', 'utf-8')
    fichier_guide_xml.write('<?xml version="1.0" encoding="utf-8"?>\n')
    fichier_guide_xml.write('<!DOCTYPE tv SYSTEM "xmltv.dtd">\n')
    fichier_guide_xml.write('<tv generator-info-name="epg" generator-info-url=".free">\n')
    fichier_guide_xml.write('  <channel id="chaine1.free">\n')
    fichier_guide_xml.write('    <display-name>chaine1</display-name>\n')
    fichier_guide_xml.write('  </channel>\n')
     
     
    fichier_guide_xml.write('<programme start="??" stop="??" channel="??">\n')
    fichier_guide_xml.write('                <title>%s</title>\n' %serie_xmltv)
    fichier_guide_xml.write('                <sub-title>%s</sub-title>\n' %titre_xmltv)
    fichier_guide_xml.write('                <desc></desc>\n')
    fichier_guide_xml.write('                <category></category>\n')
    fichier_guide_xml.write('                <length units="minutes"></length>\n')
    fichier_guide_xml.write('                <video><aspect></aspect></video>\n')
    fichier_guide_xml.write('                <audio><stereo></stereo></audio>\n')
    fichier_guide_xml.write('        </programme>\n')
     
    fichier_guide_xml.write('</tv>')
    fichier_guide_xml.close()

    merci de votre aide

    Cordialement

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # -*- coding: utf-8 -*-:-
    *et* que vous demandez à Python de convertir les chaînes de caractères en Unicode, votre script doit être en codé en 'utf-8'
    L'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xe9 in position 0: unexpected end of data
    dit seulement que votre "é" a été codé '\xe9' (plutôt latin-1) au lieu de '\xc3\xa9' (utf-8).
    Et, à priori, c'est l'éditeur/IDE qui sauvegarde le script qui doit faire ce boulot.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Et ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    serie_xmltv = u"é"
    ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Et ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    serie_xmltv = u"é"
    ?
    Après "from __future__ import unicode_literals" çà ne sert à pas grand chose... Et çà ne sauvera pas le fichier dans un encoding cohérent avec celle déclarée dans l'en-tête "coding:..."

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 88
    Points : 63
    Points
    63
    Par défaut
    Bonjour

    j'ai finalement résolu mon problème en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with codecs.open(fichier_source, 'r' ,encoding='iso-8859-1') as f:
        text = f.read()
     
    with codecs.open(fichier_destination, 'w', encoding='utf8') as f:
        f.write(text)
    Cordialement

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

Discussions similaires

  1. Problème encodage fichier mac pour rename php
    Par Geoffrey74 dans le forum Langage
    Réponses: 3
    Dernier message: 08/04/2016, 08h02
  2. problème encodage fichier pdf
    Par marco056 dans le forum Général Python
    Réponses: 5
    Dernier message: 12/11/2013, 00h02
  3. Problème encodage fichier CSV
    Par Idleman dans le forum ASP.NET
    Réponses: 4
    Dernier message: 15/10/2012, 07h37
  4. Interop.Word Enregistrer fichier problème encodage image
    Par the java lover dans le forum C#
    Réponses: 1
    Dernier message: 13/01/2010, 10h36
  5. problème encodage des noms de fichiers
    Par kiopa'a dans le forum Général Python
    Réponses: 2
    Dernier message: 26/06/2007, 12h49

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