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 encodage utf8


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut problème encodage utf8
    Bonjour à tous,
    J'ai un problème d'encodage d'accents avec python 2. J'ai essayé toutes les solutions proposées mais aucune ne marche. Je dois adapter l'algo de Nervig pour le français. Pour cela ça doit passer par une prise en compte des accents, j'ai donc modifié de cette manière (ce qui est gras):
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    # -*- coding: utf-8 -*-
    import re
    from collections import Counter
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    import codecs
    def words(text): return re.findall(r'\w+', text.lower())
    
    f     = codecs.open('big.txt',encoding='utf-8')
    WORDS = Counter(words(f.read()))
    
    def P(word, N=sum(WORDS.values())): 
        "Probability of `word`."
        return WORDS[word] / N
    
    def correction(word): 
        "Most probable spelling correction for word."
        return max(candidates(word), key=P)
    
    def candidates(word): 
        "Generate possible spelling corrections for word."
        return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
    
    def known(words): 
        "The subset of `words` that appear in the dictionary of WORDS."
        return set(w for w in words if w in WORDS)
    
    def edits1(word):
        "All edits that are one edit away from `word`."
        letters     = ('abcdeéèfghijklmnopqrstuvwxyz')
        splits     = [(word[:i], word[i:])    for i in range(len(word) + 1)]
        deletes    = [L + R[1:]               for L, R in splits if R]
        transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
        replaces   = [L + c + R[1:]           for L, R in splits if R for c in letters]
        inserts    = [L + c + R               for L, R in splits for c in letters]
        return set(deletes + transposes + replaces + inserts)
    
    def edits2(word): 
        "All edits that are two edits away from `word`."
        return (e2 for e1 in edits1(word) for e2 in edits1(e1))
    Mais ça me donne :
    'dif\xc3\xa9rent'


    J'ai aussi tenté de modifier la variable letters puisqu'elle prend en compte des accents mais rien ne marche...
    D'avance merci :-)

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

    Citation Envoyé par roline Voir le message
    J'ai un problème d'encodage d'accents avec python 2.
    Pourquoi Python2 alors que Python3 corrige la plupart des problèmes d'encodage?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Pourquoi Python2 alors que Python3 corrige la plupart des problèmes d'encodage?

    - W
    Parce que le module que j"utilise ne fonctionne pas avec python3.

  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,

    Lire en utf-8 avec codecs est bien. Mais une fois qu'on a une chaine en mémoire codée 'utf-8' et qu'on veut l'afficher, il faut la convertir dans le codec que ce périphérique d'affichage supporte.

    Par exemple, si j'affiche dans idle de Python 2.7 sous Windows, je fais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print 'dif\xc3\xa9rent'.decode('utf-8').encode('cp1252')
    diférent
    (j'espère que ce n'est pas Python qui a fait disparaître un 'f' ;-) ).

    Le principe est simple:
    'dif\xc3\xa9rent' est une chaine 'utf-8'
    .decode('utf-8') la convertit en unicode
    .encode('cp1252') convertit l'unicode en 'cp1252' qui est l'encodage de Windows.

    A noter que pour convertir une chaine d'un codec à un autre, on passe toujours par l'intermédiaire de l'unicode.

    Mais si l'affichage devait être fait dans la console de Windows (cmd.exe), l'encodage serait 'cp850' en remplacement de 'cp1252'.

    A noter que de nos jours, même avec Python 2.7, de nombreux périphériques supportent l'unicode. Ainsi, idle supporte très bien cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print 'dif\xc3\xa9rent'.decode('utf-8')
    diférent

Discussions similaires

  1. problème encodage UTF8 avec mysql
    Par herykid83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/07/2011, 16h49
  2. probléme encodage utf8
    Par hihi30 dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/09/2009, 17h49
  3. [ZF 1.7] problème Encodage utf8 + css
    Par miya dans le forum Zend Framework
    Réponses: 8
    Dernier message: 11/12/2008, 22h19
  4. [MySQL] Problème encodage UTF8
    Par hatembr dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/04/2007, 18h00
  5. Problème d'encodage UTF8
    Par vg33 dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2006, 19h28

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