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 :

python et pango : comment forcer l'utf8 ?


Sujet :

Python

  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 464
    Par défaut python et pango : comment forcer l'utf8 ?
    bonjour,

    j'ai une erreur de codage que je n'arrive pas à résoudre :

    GtkWarning: Failed to set text from markup due to error parsing markup...en UTF-8 non valide : Erreur....
    et

    PangoWarning: Invalid UTF-8 string passed to pango_layout_set_text()
    je souhaiterai forcer le texte en utf8, y-a-t-il une fonction qui peut me faire ça ?

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    uneChaine.encode('utf-8')

    @+

  3. #3
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 464
    Par défaut ok
    bonjour et merci de l'astuce, mais avec cette convertion, une autre erreur survient :
    UnicodeDecodeError: 'utf8' codec can't decode bytes in position 98-100:invalid data
    avez-vous une idée du problème ?

  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,

    La méthode .encode() s'applique à une chaine qui doit déjà être en unicode interne (une sorte d'utf-16 simplifié). Si tu as une erreur, c'est que ce n'est pas le cas.

    Tu peux d'ailleurs le tester: si type(uneChaine) ne renvoie pas unicode mais str, la chaine est dans un autre encodage: lequel?

    Dès que tu as trouvé, et admettons que ce soit 'latin1', tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uneChaine.decode('latin1').encode('utf-8')
    La méthode .decode() convertit la chaine en unicode interne, et la méthode .encode() la convertit en utf-8. Sous python, on passe toujours d'un encodage à un autre en passant par l'unicode interne.

    Tyrtamos

  5. #5
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 464
    Par défaut
    voilà ! j'ai résolu en faisant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    						enco = sys.getdefaultencoding()						
    						texte = unicode(texte, enco).encode('UTF-8')
    même si mon texte originale était utf8, ça voulait pas bien le prendre...là ça prend tout

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Plus simple : u(uneChaine).encode('utf-8')

    @+

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  2. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  3. Réponses: 2
    Dernier message: 17/10/2005, 10h29
  4. [Sql] Comment forcer un Accent-Insensitive ?
    Par manu59 dans le forum DB2
    Réponses: 2
    Dernier message: 23/08/2005, 13h39
  5. [Struts]comment forcer un Forward ?
    Par njac dans le forum Struts 1
    Réponses: 4
    Dernier message: 13/10/2004, 15h02

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