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 Python 3


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Par défaut Problème d'encodage Python 3
    Bonjour.

    Je suis sous Windows 7 (64bits) et je rencontre un problème d'encodage avec Python. Je rajoute bien la ligne appropriée au début du programme qui est :
    Mais j'ai toujours les lettres accentuées qui s'affichent bizarrement.

    J'espère que vous pourrez m'aider à comprendre et à régler le problème.

    Merci par avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par ZhaoZhao Voir le message
    Mais j'ai toujours les lettres accentuées qui s'affichent bizarrement.
    Encodage et décodage ont de l'importance pour toutes séquences de bytes qui entrent et sortent.
    Si vous écrivez # -*-coding:latin-1 -*, çà ne concernera que le codage du fichier texte (le script) et çà sera utilisé par Python pour décoder les bytes qu'il contient et les transformer en Unicode.

    Et si le script lit/écrit des fichiers ou affiche sur un terminal, il le fera avec un "encoding" par défaut. S'il n'est pas correct, il faudra préciser l'encodage à utiliser... qui dépend du paramétrage de votre environnement (à vous de regarder ce qu'il est).

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Par défaut
    Bonjour.

    Merci pour votre réponse. Si j'ai bien compris,la ligne qu'on ajoute au début sert à Python pour qu'il sache comment décoder le fichier script (qui est codé selon cette même ligne). Mais quand l'écriture/la lecture se fait sur autre "chose" que Python alors on doit utiliser un autre codage qui est approprié à chette "chose", n'est-ce pas ?

    Si j'ai saisi correctement, le problème persiste toujours car j'exécute le fichier .py avec Python (qui s'ouvre comme une console...).

    Merci par avance.

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

    Comme déjà dit plus haut, la ligne "# -*-coding:latin-1 -*" ne sert qu'au démarrage du programme Python pour lui dire avec quel encodage il doit lire les chaînes de caractères "codées en dur" dans le code.

    Encore faut-il que ce soit vrai! Cela suppose que l'éditeur de texte utilisé était bien configuré pour éditer et enregistrer le texte du programme avec cet encodage.

    Pour le vérifier sous Windows on peut, entre autres, utiliser un éditeur comme "notepad++" qui permet d'éditer et convertir un texte en n'importe quel encodage.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Il s'est passé quelque chose de bizarre. J'ai téléchargé Notepad++, j'ai trouvé que l'encodage était UTF-8. J'ai recopié mon code dans le Notepad++ et j'ai sauvegardé en .py et quand j'ouvre avec Python tout se passe bien. J'ai pensé que le problème avec mon éditeur précédent c'est que le codage était UTF-8 (je travaille avec Pyzon en fait donc un IDE). J'ai changé le Latin-1 en UTF-8 et là le fichier s'ouvre et se referme (j'ai bien précisé os.system("pause") à la fin -tout en ayant importé os). Je remet Latin-1 et maintenant le programme s'exécute normalement et sans problème d'accents en plus...

    Merci pour votre aide, le problème est résolu maintenant. Mais je ne comprends toujours pas ce qui s'est passé. Si vous pouviez me fournir un coup d'explication se serait merveilleux.

    Merci par avance.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par ZhaoZhao Voir le message
    Merci pour votre aide, le problème est résolu maintenant. Mais je ne comprends toujours pas ce qui s'est passé. Si vous pouviez me fournir un coup d'explication se serait merveilleux.
    Je prends une chaine de caractères:
    Si je l'encode/décode avec le bon encoding, j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s.encode('latin-1').decode('latin-1')
    'élève'
    >>> s.encode('utf8').decode('utf8')
    'élève'
    et si je me mélange les pinceaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> s.encode('latin-1').decode('utf-8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 0: invalid
    continuation byte
    Dans ce cas le programme plante et n'atteint pas la dernière ligne qui permettrait de voir l'erreur.
    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s.encode('utf8').decode('latin-1')
    'élève'
    çà affiche de drôle de chose mais çà ne plante pas.

    Il n'y a rien à comprendre sinon que encode et decode doivent se faire avec l'encoding qui va bien... à défaut, Python fait ce qu'il peut.

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

Discussions similaires

  1. Lecture fichier RDS sous python: Problème d'encodage
    Par Marc A dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 01/11/2017, 20h01
  2. Python - SQL problème d'encodage
    Par cocs78 dans le forum Général Python
    Réponses: 6
    Dernier message: 21/02/2017, 11h10
  3. Python + Apache : problème d'encodage UTF8 [résolu]
    Par CetTer dans le forum Général Python
    Réponses: 5
    Dernier message: 16/12/2013, 21h53
  4. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  5. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59

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