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 Décodage Python


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Par défaut Encodage Décodage Python
    Bonjour,

    je récupère en python des informations dans un texte en grec, le but est de faire des test sur cette chaîne, par exemple si le mois = novembre alors j'affiche novembre ^^
    Le problème c'est que quand j'affiche le mois grec, ça me met plein de caractères spéciaux et c'est donc impossible à tester, j'ai essayé de bidouiller avec encode('utf8') ou encode('Latin-1') mais c'est pas vraiment plus beau...

    Si quelqu'un a une idée, je suis tout ouïe

    Merci !

  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 ne connais pas le grec, mais ces pb d'encodage sont faciles à résoudre, à condition d'avoir une vision complète de tous les éléments contributifs (pour Python v2.x):

    1- il faut un éditeur de texte qui travaille en utf-8 (idle configuré en utf-8 convient)

    2- dans le code, il faut dire à Python que la page de code est en utf-8 avec la ligne coding:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # -*- coding: utf-8 -*-
    3- en interne, on ne travaille pas en utf-8, mais en unicode. Ce que Python appelle unicode est l'ucs2 (un utf-16 simplifié). Par exemple, ici, Python comprendra que x est en unicode grâce au 'u':
    x = u"Επιχειρηματικές λύσεις"
    On aurait pu avoir de même:

    x = "Επιχειρηματικές λύσεις".decode('utf-8')
    S'il s'agit de lire un fichier sur disque contenant du grec, il est intéressant d'utiliser le module codecs qui permet d'intégrer directement de l'unicode.

    4- il reste à afficher dans une console qui possède un encodage en utf-8. Par exemple idle configuré en utf-8 fait ça très bien. Dans ce cas, puisque x est en unicode:


    print x.encode('utf-8')
    Επιχειρηματικές λύσεις

    (Pour trouver du texte en grec, je me suis contenté d'appeler www.google.gr et de copier-coller )

    Tyrtamos

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

    Citation Envoyé par tyrtamos Voir le message
    Pour trouver du texte en grec, je me suis contenté d'appeler www.google.gr et de copier-coller )
    Les solutions les plus simples sont souvent les meilleures. Par contre, impossible de copier-coller quoique ce soit en grec dans SciTE, qui est mon éditeur de sources python: Tout est remplacé par des points d'interrogation. Même après avoir écrit l'entête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # -*- coding: utf-8 -*-

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

    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # -*- coding: utf-8 -*-
    n'est prise en compte qu'à l’exécution du script - en fait, après la lecture du fichier contenant le script par l'interpréteur.

    Si le script contient des caractères non-ASCII (>127), il faut aussi que l'éditeur ait été configuré pour les sérialiser en UTF-8.

    Potentiellement, on pourrait faire que le "clavier", "cut&paste", "stdout" utilisent des systèmes d'encodage différents...

    Tout cela paraît fort compliqué mais in fine, la règle étant que le "buffer" qui contient une image du fichier édité puisse être représenté de façon "standard" - i.e. en Unicode - et que les conversions entre les formats sérialisés "vers" ou "depuis" ce "buffer" puissent se faire "comme attendu".

    - W
    PS: setting emacs
    (setq locale-coding-system 'utf-8)
    (set-terminal-coding-system 'utf-8)
    (set-keyboard-coding-system 'utf-8)
    (set-selection-coding-system 'utf-8)
    (prefer-coding-system 'utf-8)
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  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,

    Pour pfeuh: je ne connais pas Scite, mais reprend mon point 1: il faut un éditeur capable de travailler en utf-8, et configuré en utf-8. J'ai fait pas mal d'essais systématiques, et il m'a même fallu vérifier en analysant les fichiers enregistrés avec un éditeur hexa.

    Attention: souvent, quand on met la configuration à 'utf-8', cela ne concerne que les nouveaux fichiers créés dans l'éditeur.

    Attention aussi: certains éditeurs de texte (comme notepad!) mettent un 'BOM' en début de fichier (http://fr.wikipedia.org/wiki/Marque_...dre_des_octets), ce qui n'est pas toujours accepté par Python. Il existe d'ailleurs un codec spécial (utf_8_sig) pour lire des fichiers utf-8 avec BOM.

    Sous Windows, ce n'est pas toujours simple de trouver un éditeur utf-8 pour le développement en Python. J'ai choisi eclipse + pydev qui en est capable, mais aussi que je peux trouver à l'identique sous Linux. Avec PyScripter (Windows), ça marche aussi mais la console est en unicode ou en latin1 mais pas en utf-8 (en tout cas, je n'ai pas trouvé).

    Mais comme je l'ai signalé, idle configuré en utf-8 fait ça très bien (édition + console).

    Tyrtamos

  6. #6
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    ...
    Sous Windows, ce n'est pas toujours simple de trouver un éditeur utf-8 pour le développement en Python. J'ai choisi eclipse + pydev qui en est capable, mais aussi que je peux trouver à l'identique sous Linux. Avec PyScripter (Windows), ça marche aussi mais la console est en unicode ou en latin1 mais pas en utf-8 (en tout cas, je n'ai pas trouvé)...
    Sous windows, j'utilise personnellement Notepad++ qui permets de gérer les fichiers utf 8 (avec ou sans BOM) et de convertir tout fichier Ansi en utf8 et inversement. (Menu Encodage)

Discussions similaires

  1. Encodage / Décodage AAC en Java
    Par Reeter dans le forum Multimédia
    Réponses: 0
    Dernier message: 02/04/2009, 13h28
  2. Encodage & Décodage de fichier AMF avec java
    Par Kadran dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/03/2009, 12h24
  3. problème d'encodage décodage
    Par dj.motte dans le forum Général Python
    Réponses: 2
    Dernier message: 13/10/2008, 13h12
  4. encodage en python
    Par anna1980 dans le forum Général Python
    Réponses: 2
    Dernier message: 09/06/2008, 23h03
  5. 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

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