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 :

Lecture de fichier texte : pb d'encode


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 97
    Par défaut Lecture de fichier texte : pb d'encode
    Bonjour,
    Dans une fonction simple, j'ouvre un fichier text que je parse à la recherche d'un tag spécifique.
    J'ai un problème d'ouverture de fichier txt. Je fais appel au code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    filename = "bidule.txt"
    file = open(filename, 'r',encoding='utf-8')
    Mon fichier txt peut contenir des caractères accentés d'où l'encoding.
    Sauf que à l'execution j'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeDecodeError: 'utf8' codec can't decode bytes in position 128-130: invalid data
    le caractère à la position 129 est "é"........le codec UTF-8 ne parle-t-il pas français?

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je viens d'essayer, et ça marche (Python 2.6.2).

    - le paramètre "encoding" n'existe que pour l'open du module codecs.

    - le encoding='utf-8' suppose que le fichier est stocké en 'utf-8'. Si tu n'en es pas sûr, je te suggère d'utiliser un éditeur en hexadécimal (EditHexa sous Windows ou l'équivalent sous Linux) qui te permettra de le vérifier sans passer par Python.

    - une fois chargée en mémoire, la chaine en question est de type "unicode" interne (version simplifiée de l'utf-16).

    Voilà ce que j'ai essayé:

    - enregistrement en utf-8 d'un fichier "test" contenant simplement "abcéèçà"

    - code d'essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import codecs
     
    filename = "test"
    file = codecs.open(filename, 'r', encoding='utf-8')
    ch = file.readline()
    file.close()
    print ch.encode('utf-8')
    Ce qui, chez moi, affiche bien "abcéèçà" sans erreur.

    Le "print" s'adressant à la console d'affichage, il faut en préciser l'encodage avec le "encode". La mienne est en 'utf-8'. Si ta console d'affichage est en 'cp850' (encodage de la console DOS de Windows), cela devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print ch.encode('cp850')
    Tyrtamos

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/11/2006, 20h57
  2. [C#]Lecture gros fichier texte
    Par kekesilo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/05/2006, 13h58
  3. Lecture d´un fichier texte .
    Par pilouface dans le forum C
    Réponses: 5
    Dernier message: 20/01/2006, 23h48
  4. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  5. lecture de fichier texte
    Par prorider dans le forum C
    Réponses: 36
    Dernier message: 08/09/2004, 20h55

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