Affichage accents dans les listes en Python

Résolu
ugluk Messages postés 7 Statut Membre -  
 PetitPimousse -
Bonjour,

En Python, lorsque j'utilise la méthode "append" pour ajouter des éléments à mes listes, j'ai un problème avec l'affichage des accents. Par exemple, si la valeur de ma variable est "Février", je reçois en sortie par la méthode append "F\xe9vrier". Si j'utilise la commande "print" avec la même variable, l'affichage est bon.

Quel est le problème?

Merci
Configuration: Windows XP
Firefox 3.0.6

6 réponses

  1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    A lire impérativement concernant tes problème d'accents:
    https://sebsauvage.net/python/charsets_et_encoding.html
    1
    1. @robaze
       
      salut seb,
      dis moi sais-tu comment je peux transformer une liste en chaine de caractere?
      voici mon code:
      def mdp_aleat():
      print "Combien de caracteres?",
      nb_caract=int(raw_input())
      mdp=nb_caract*[0]
      val=nb_caract*[0]
      for i in range (nb_caract):
      val[i]=random.randrange(random.randrange(48,90),random.randrange(97,122))
      mdp[i]=chr(val[i])
      print val, mdp
      print "Mot de passe=",mdp

      malheuresement, mdp me retourne une liste ms moi je voudrai recuperer une chaine de caratère.
      Merci
      0
  2. Utilisateur anonyme
     
    Salut, c'est normal, ce qui est retourné est un objet string. Cet objet est codé. La fonction print se charge de décoder pour afficher.
    0
    1. ugluk Messages postés 7 Statut Membre
       
      Y'a-t-il un moyen alors de décoder l'objet string via la méthode append ou faut-il absolument extraire l'objet de la liste et le faire imprimer par print pour que l'affichage soit correct?
      0
  3. Utilisateur anonyme
     
    Dans un programme on se sert en général de print pour afficher des résultats, pourquoi vouloir passer directement par l'objet? Puis cette chaîne tu dois l'afficher où? Sur la console? Dans une interface graphique?
    0
    1. ugluk Messages postés 7 Statut Membre
       
      En fait, j'utilise "print" mais pour afficher la valeur de la variable mise à jour par "append". Je voulais juste savoir s'il était possible d'afficher directement cette variable avec les bons caractères sans en extraire les éléments un à un.

      exemple:

      t3=['Janvier']

      t3.append('Février']

      print t3


      La sortie va donner ['Janvier', 'F\xe9vrier'].

      Est-il possible d'avoir directement la sortie: ['Janvier', 'Février']?
      0
  4. Utilisateur anonyme
     
    Là tu affiche un objet liste qui utilise lui même des objets chaîne, donc codés. Essaie de mettre peut être au début du code source :

    #  -*- coding=latin-1 -*-
    0
    1. ugluk Messages postés 7 Statut Membre
       
      Bien entendu, c'est la première chose que j'ai essayé avant de "poster" ce problème. J'ai même essayé plusieurs codages (utf-8, etc...)

      Ça ne change rien...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    print "Mot de passe=","".join(mpd)
    0
    1. @robaze
       
      merci
      0
    2. ugluk Messages postés 7 Statut Membre
       
      Alors je dois conclure que je ne peux pas afficher directement une liste avec des éléments comprenant des accents, il faut que j'extraie les éléments et que je passe par print pour chaque élément pour avoir un affichage décodé? C'est ça?
      0
    3. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684 > ugluk Messages postés 7 Statut Membre
       
      Non.
      Pas besoin.

      Exemple de code:
      #!/usr/bin/python
      # -*- coding: iso-8859-1 -*-
      
      maliste = [u"bébé",u"tété",u"mémé"]
      print ' ; '.join(maliste)



      et dans une fenêtre Dos, je lance mon programm qui s'affiche très bien:
      c:\3>python a.py
      bébé ; tété ; mémé
      0
    4. ugluk Messages postés 7 Statut Membre > sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ça marche lorsqu'il n'y a que des mots dans la liste. Le problème c'est que ma liste comprend des "strings" et des "integer"... ce que la fonction "join" ne semble pas supporter:

      TypeError: sequence item 1: expected string or Unicode, int found
      0
    5. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684 > ugluk Messages postés 7 Statut Membre
       
      ah ben oui, quand on mélange des pommes et des bananes :-)

      #!/usr/bin/python
      # -*- coding: iso-8859-1 -*-
      
      maliste = [u"bébé",u"tété",5,u"mémé"]
      print ' ; '.join( [unicode(i) for i in maliste] )
      0