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 :

Erreur unicode / ASCII


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut Erreur unicode / ASCII
    Bonjour a tous,
    j'ai quelque problème avec des caractères unicode dans mes string.
    En faite, j'ai un script qui génère un fichier html a partir d'un log svn en xml.
    Dans l'un des commit, j'ai un caractère unicode.

    voici l'erreur que j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Traceback (most recent call last):
      File "./svn_External_bat/createHtmlSvnLog.py", line 104, in <module>
        compute(sys.argv[1],sys.argv[2],' '.join(sys.argv[3:]))
      File "./svn_External_bat/createHtmlSvnLog.py", line 99, in compute
        insertTologFile(html,outputFile)
      File "./svn_External_bat/createHtmlSvnLog.py", line 81, in insertTologFile
        contentFile=contentFile.encode("utf-8") 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)

    voici le code qui pose problème
    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
     
    def convertXmlLogToHtml(xml,version):
        doc=parseString(xml)
        root=doc.documentElement
     
        strDate=datetime.today().strftime("%d/%m/%Y at %HH%M")
     
        htmlOutput="\n\t\t<div class='section' id='{0}'>\n\t\t\t<div class='headSection'>\n\t\t\t\t<h2>{0} - {1}</h2>\n\t\t\t</div>\n".format(version,strDate)
     
        for messageNode in root.getElementsByTagName('msg'):
            if len(messageNode.childNodes) > 0:
                msg=messageNode.childNodes[0].nodeValue
                msg=re.sub("(?P<link>http:[^\\s]+)","<a href='\g<link>'>\g<link></a> ",msg)
                htmlOutput+="\t\t\t<hr class='minHr'/>\n\t\t\t<p>\n\t\t\t\t"
                htmlOutput+=msg.replace("\n","<br/>")
                htmlOutput+="<br/><br/>\n\t\t\t</p>\n"
     
     
        htmlOutput+="\t\t</div>\n"
        return htmlOutput
     
    def insertTologFile(content,outputFile):
        with open(outputFile, "r") as fichier:
            contentFile=fichier.read()
     
        try:   
            contentFile=unicode(contentFile,'utf-8')  
            content=unicode(content,'utf-8')  
        except TypeError:
            pass
     
        content=re.sub("</h1>","</h1>{0}".format(content),contentFile)
        with open(outputFile,"w") as fichier:
            fichier.write( codecs.BOM_UTF8 )
            fichier.write(content)
    Savez vous comment je peux résoudre ce problème ?
    Je vous remercie par avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut Incohérence avec la méthode fomat
    Bonjour,

    Il faut toujours être cohérent. Par exemple, le code suivant conduira immédiatement à une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'Mon poids est{}'.format(u'léger')
    La raison est que c'est la méthode format d'une chaînes ascii standard qui est invoquée. Or celle-ci ne génère pas unicode.

    Le code correct est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    u'Mon poids est{}'.format(u'Léger')
    Un simple petit u évite le problème.

    Idem dans tes expressions régulières. N'oublie pas d'utiliser re.UNICODE si besoin est.

    Donc, quand tu travaille en unicode, préfixe automatiquement tes constantes par u et tu évitera bien des déboire

    PS:
    Le module codec cotient une fonction open qui permet de spécifier l'encodage utilisé et qui convertira tes lectures en unicode de façon transparente

    Ces problème n'existent plus avec la série des pythons 3 car les chaîne de caractères sont toujours en unicode.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    ok, effectivement plus de problème.
    merci

    PS: je ne voyais pas trop l’intérêt de passer a python 3.x mais la je sens que je vais faire le passage.

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

Discussions similaires

  1. Conversions Unicode Ascii
    Par Klaim dans le forum C++
    Réponses: 25
    Dernier message: 01/08/2007, 22h15
  2. [unicode/ascii] Comment changer l'encodage par défaut????
    Par Mr Hyde dans le forum Général Python
    Réponses: 2
    Dernier message: 07/10/2005, 09h24
  3. [C#] Convertir un string UNICODE => ASCII
    Par alex57 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/09/2005, 20h32
  4. erreur unicode
    Par mickael99 dans le forum Général Python
    Réponses: 11
    Dernier message: 26/07/2005, 09h19
  5. conversion Unicode -> ASCII
    Par juzam dans le forum C
    Réponses: 8
    Dernier message: 24/07/2003, 10h07

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