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

Programmation multimédia/Jeux Python Discussion :

[Pygame] Problème d'encodage des accents


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 134
    Points : 61
    Points
    61
    Par défaut [Pygame] Problème d'encodage des accents
    Bonjour à tous,

    j'ai un petit problème d'accents sous pygame.

    J'utilise la fonction suivante pour afficher du texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    pygame.init()
    screen = pygame.display.set_mode((0, 0), FULLSCREEN | DOUBLEBUF | HWSURFACE)
    position[0], position[1] = screen.get_size()
    texte = "Bonne journée"
     
     
    screen.fill(background_color)
    surf = font.render(texte, True, text_color, background_color )          
    screen.blit(surf, [position[0] - surf.get_width()/2, position[1] - surf.get_height()/2])
    pygame.display.flip()
    et je n'obtiens pas mon accent, autrement dit j'obtiens les caractères "A©" à la place de mon accent.

    Par contre les accents sont correctement affichés dans la console avec une instruction print() (mon fichier et ma console sont tous les deux en utf-8).

    Comment faire pour obtenir des accents dans une fenêtre pygame ?

    Merci d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    je n'y connais pas grand chose à Pygame mais essaie de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    # -*- coding: utf-8 -*-
    au début de ton fichier à tout hasard.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    salut biribibi,

    c'était déjà présent, et cela ne change rien.

  4. #4
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    essaye en préfixant avec u:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte = u"Bonne journée"
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 76
    Points : 94
    Points
    94
    Par défaut
    Salut !

    C'est clairement un problème d'encodage de la chaine de caractères. En plus des conseils précédants (définir l'encodage de la page et utiliser des strings unicode) tu peux employer encode et/ou décode pour faire d'éventuelles conversions. Essaie par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    surf = font.render(texte.decode('utf-8'), True, text_color, background_color )
    Et surtout, je te conseille la lecture de cet article qui explique en détail tout ce qu'il faut savoir à ce sujet (je retourne moi-même régulièrement le consulter ^^) : http://sebsauvage.net/python/charsets_et_encoding.html

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Merci à tous cela marche à présent.

    Il suffisait simplement d'encoder la chaine en unicode.

    En fait c'est un peu plus compliqué que ça : j'étais déjà tombé sur la page de sebsauvage où il indique que l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chaine = u"Bonne journée"
    print u.encode(sys.stdout.encoding,'replace')
    permet de bien afficher son texte à coup sûr, et c'est ce que j'avais testé pour pygame. Mais mettre u"Bonne journée" suffit dans mon cas.

    Bonne journée du coup.

  7. #7
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par fuyo2004 Voir le message
    En fait c'est un peu plus compliqué que ça : j'étais déjà tombé sur la page de sebsauvage où il indique que l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chaine = u"Bonne journée"
    print u.encode(sys.stdout.encoding,'replace')
    Cela m'étonne que tu trouve cela sur les pages de sebsauvage...
    Un chaine.encode(sys.stdout.encoding, 'replace') ou u"Bonne journée".encode(sys.stdout.encoding, 'replace') à la limite.

    Désolé mais c'est pour les lectures prochaines

    @+
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Un chaine.encode(sys.stdout.encoding, 'replace') ou u"Bonne journée".encode(sys.stdout.encoding, 'replace') à la limite.
    Oui ça c'est une faute de frappe de ma part, désolé.
    Il s'agit bien de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chaine = u"Bonne journée"
    print chaine.encode(sys.stdout.encoding,'replace')
    qui permet d'afficher le texte avec un point d'interrogation à la place des caractères inconnus.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/05/2014, 13h38
  2. Réponses: 16
    Dernier message: 25/07/2012, 12h40
  3. [XML] [XSLT] Problème d'encodage des accents
    Par missllyss dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 12/06/2008, 16h01
  4. [XML][Flash] Problème d'encodage des accents
    Par JoN28fr dans le forum Flash
    Réponses: 20
    Dernier message: 11/10/2006, 21h16
  5. [XML][Flash] Problème d'encodage des accents
    Par JoN28fr dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 06/10/2006, 16h45

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