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 :

Encodage fichier texte


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut Encodage fichier texte
    Bonjour à tous,

    n'ayant pas trouvé de réponse à ma question, je viens la poser ici.


    Je souhaite ouvrir un fichier texte encodé en UTF-8. C'est moi qui ai créé le fichier pour être sûr de l'encodage.

    Je suis sur MAC avec Python 3.3.4

    J'ai lu un peu partout que par défaut Python était réglé sur UTF-8, mais quand j'ouvre mon fichier texte, les accents ne sont pas gérés et sont remplacés par un code de type /xc3, ...

    Le problème c'est que j'ai évidemment besoin de géré les accents

    J'ai essayé différentes méthodes trouvées un peu partout sur le net, mais rien à faire


    Est ce que quelqu'un aurait une idée ?

    Merci d'avance

    @+

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Est ce que tu parles de scripts python ou de fichiers texte ouverts avec python? Dans le premier cas il faut ajouter au début de ton script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/usr/bin/python
    # encoding: utf-8
    Dans le deuxième cas ton fichier est toujours lu en mode utf-8, il faut le "décoder" pour avoir de l'unicode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("my_file.txt", "r") as fp:
        text = fp.read(-1).decode("utf-8")
    il est possible que tu aies un entête de deux octets à supprimer dans ton fichier texte originel

    A+

    Pfeuh

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut
    Super, merci Pfeuh, çà fonctionne (je suis avec un fichier texte ouvert avec Python, donc 2ème solution).

    Ca c'était la 1ère étape pour comprendre

    Maintenant, j'ai un fichier .rtf encodé en us-ascii (d'après la fonction "file" directement dans le terminal), j'ai fait ta manip avec ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("my_file.txt", "r") as fp:
        text = fp.read(-1).decode("us-ascii")
    Ca paraissait trop simple, je me retrouve avec le même problème, les accents qui sont remplacés par un code. J'ai essayé comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # -*- coding:us-ascii -*- 
    with open("my_file.txt", "r") as fp:
        text = fp.read(-1).decode("us-ascii")
    Ca change rien.

    Est ce que l'idéal serait pas de transformer le us-ascii en utf-8 ? Si oui, comment faire ?

    @+

  4. #4
    Membre expérimenté
    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
    Par défaut
    Bonjour,

    Je m'interroge. Le codage us-ascii est sur 7 bits et ne permet pas les caractères accentués.
    Est-tu sûr de l'encodage de ton fichier ?

    Sinon en python 3, la fonction open permet de spécifier l'encodage du fichier lu ou écrit,
    de sorte que tu n'a plus à faire des decode et des encode.

  5. #5
    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,

    chticricri a raison: us-ascii est limité à 7 bits, et toute tentative d'utiliser des caractères accentués génère une erreur.

    Pour le reste, comme on est avec Python 3, il faut effectivement utiliser l'argument "encoding=" dans l'appel de open, et on obtient de l'unicode (type str pour Python 3). Cela correspond au codecs.open de Python 2.

    Mais, pour savoir si les accents sont bien restitués, on affiche avec un outil d'affichage (console, widget graphique, ...) qui attend aussi un certain encodage. Si nécessaire, il faut ajuster l'encodage (.encode(...)) au moment de l'affichage. Je dis ça parce qu'on a quelquefois l'impression qu'une chaine est mal encodée en mémoire, alors qu'en fait on essaie de l'afficher sur une console qui supporte un autre encodage.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut
    c'est la fonction "file -I nom_du_fichier.rtf" qui me dit que l'encodage est en us-ascii, et lorsque j'ouvre le fichier avec Textedit par exemple, j'ai bien les accents.

    Mais j'ai cru comprendre que c'est pas forcément évident d'obtenir l'encodage d'un fichier.

    J'ai transformé le fichier en .txt avec encodage en UTF-8, et ça fonctionne, par contre, il faut faire un copié / coller du texte, et évidemment je n'ai pas qu'un fichier, loin de là !

    Mes fichier .rtf viennent de l'extraction de texte dans un pdf réalisée avec Automator. Je vais essayé de transformer mes fichiers .rtf en .txt avec Automator. C'est peut-être la meilleure solution ...

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

Discussions similaires

  1. Encodage fichiers texte
    Par Zac699 dans le forum Mac OS X
    Réponses: 1
    Dernier message: 22/06/2013, 22h42
  2. Pb encodage fichier texte en pj d'un mail
    Par Pgs dans le forum Langage
    Réponses: 0
    Dernier message: 01/09/2012, 11h54
  3. encodage fichier texte
    Par dingo200 dans le forum C
    Réponses: 6
    Dernier message: 09/06/2009, 10h47
  4. [VB 2005]encodage fichier texte
    Par Mandarine dans le forum VB.NET
    Réponses: 1
    Dernier message: 03/11/2007, 14h43
  5. [encodage fichier texte]
    Par nyko_kliko dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 28/07/2006, 16h21

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