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 caractères accentués !


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut Problème caractères accentués !
    Bjr,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> var="poète"
    >>> print var
    poète
    >>> print len(var)
    6
    >>>print var[:3]
    po
    >>>
    >>> liste=['poète']
    >>> print liste
    ['po\xc3\xa8te']
    Comme on peut le voir, poète ne contient que 5 caractères...!

    Comment faire pour afficher les 3 premiers caractères de la variable ou de la liste[0] ???

    Pour python, poète = 'po\xc3\xa8te'

    Il doit bien y avoir moyen de passer outre ?

    Merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Bonjour,
    Il faut passer par l'unicode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> var = u"poète"
    >>> print len(var)
    5
    >>> print var[:3]
    poè

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Merci
    Même avec les listes ca fonctionne ...Faut juste déclarer la variable avant comme il faut.

    Arff, les débuts sont pas évidents en python qd on ne connait que le bash!

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Avec Python 3, il n'y a plus ce problème car les chaînes de caractères sont en UTF-8.

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    à rambc: je suppose que tu parles de Python 3 (que je ne connais pas encore), parce qu'avec Python 2.6, on ne peut pas travailler en utf-8, mais uniquement en unicode interne (1 caractère=2 octets) ou avec un encodage traditionnel (1 caractère=1 octet).

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    x = u"abcéèà".encode('utf-8')    # <= x est en utf-8
    print len(x)
    9
    for c in x:
        print c, ord(c)
    a 97
    b 98
    c 99
    Ã 195
    © 169
    Ã 195
    ¨ 168
    Ã 195
    *160
    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    à rambc: je suppose que tu parles de Python 3 (que je ne connais pas encore)
    Oui. C'est corrigé.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Bjr,
    Et pour arriver au même résultat mais lorsque le mot provient d'un fichier ?

    J'ai essayé, encode, decode, unicode & co en vain, je dois mal m'y prendre.

    Si qql'un pouvait m'éclairer, ca m'est pas utile, mais j'aimerais bien savoir

    Merci.

  8. #8
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Pour un fichier, il faut connaître l'encodage de ce dernier.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    C'est de l'UTF 8 .
    Mais bon, avec ce foutu encodage....on sait jamais
    C'est un fichier éditer sous linux, donc en utf-8, mais provenant d'un copié/collé du web.
    La commande unix file retourne également utf-8 (mais on ne peut pas faire completement confiance au résultat).
    Je sais que l'encodage de fichier est un 'problème' en informatique, et parait-il, python est le language qui s'en sort le mieux.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Je cherchais midi à quatorze heures
    Ca suffit ! (peut être une autre manière de faire ?)

  11. #11
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour Python 2.6 (en Python 3, je ne sais pas):

    A mon avis, lorsqu'il s'agit de lire ou d'écrire un texte en unicode sur le disque, il vaut mieux utiliser le module codecs. Celui-ci permet d'intégrer les conversions d'encodage directement et de manière transparente dans les mécanismes de lecture/écriture. Et dans les traitements des chaines, on travaille en unicode interne (une sorte d'utf-16 simplifié).

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    import codecs
     
    # écriture d'un texte qui sera codé en utf-8 sur disque 
    f = codecs.open("testutf.txt", 'w', 'utf-8')
    f.write(u"abcéèç" + '\r\n')
    f.write(u"defàùô" + '\r\n')
    f.close
     
    # lecture d'un texte codé en utf-8 sur disque
    f = codecs.open("testutf.txt", 'r', 'utf-8')
    for ligne in f:
        ligne = ligne.rstrip()  # pour éliminer les caractères de fin de ligne
        print ligne, type(ligne)
    f.close
    Ce qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    abcéèç <type 'unicode'>
    defàùô <type 'unicode'>
    On voit avec cet exemple:
    - qu'en écriture, on envoie directement de l'unicode interne qui arrive en utf-8 sur disque sans utiliser encode().
    - qu'en lecture, on récupère directement de l'unicode interne sans utiliser decode(), alors que le texte sur disque était en utf-8.

    En cas d'erreur de conversion d'encodage, le mode par défaut est: 'strict', c'est à dire déclenche une exception à gérer. On peut aussi le changer par 'replace' dans open.

    Pour vérifier l'encodage effectif du texte sur disque, on peut utiliser un programme de lecture hexa (ex: EditHexa sous Windows). On peut aussi faire un petit code en Python pour relire le fichier en mode binaire afin d'accéder au texte octet par octet.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Merci pour la réponse (ca m'a permis de connaitre l'utilité de codecs).

    Par contre, je trouve un peu étrange/compliqué le comportement de python.
    Je suis sous linux, donc en utf-8, fichier en utf-8, encodage precisé en début de script utf-8, et malgrès tout, il faut encore lui preciser l'encodage lors de la lecture / écriture (et même pour la sortie sur le terminal...).

    Je sais que l'encodage est un sujet vaste et compliqué, mais là, python pourrait nous facilité un peu les choses qd même

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par AnsuzPeorth Voir le message
    Je suis sous linux, donc en utf-8
    Pas forcément. Je suis aussi sous Linux et jusqu'à il n'y a pas si longtemps, j'étais en ISO8859. L'UTF8 n'est pas une obligation de Linux...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Pas forcément. Je suis aussi sous Linux et jusqu'à il n'y a pas si longtemps, j'étais en ISO8859. L'UTF8 n'est pas une obligation de Linux...
    Dsl pour l'amalgame...Je pensais que tous les systèmes linux étaient passés en utf-8, justement pour diminuer les problèmes d'encodage (au moins entre linux)

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

Discussions similaires

  1. Problème caractères accentués TextInput
    Par GrosBibi dans le forum Intégration
    Réponses: 1
    Dernier message: 27/03/2009, 10h48
  2. Problème caractères accentués flash CS3
    Par Orinfor dans le forum Flash
    Réponses: 1
    Dernier message: 02/09/2008, 15h45
  3. [MySQL] [XML] problème caractères accentués
    Par Mathcoz dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 31/01/2007, 18h53
  4. [PHP][XSLT] problème caractères accentués
    Par beho dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 29/05/2006, 09h29
  5. [Struts] problème caractères accentués
    Par n00noors dans le forum Struts 1
    Réponses: 6
    Dernier message: 10/03/2006, 12h34

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