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 :

encodage utf-8, remplacer 'é' en 'é' dans une string pour un fichier mal codé


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 23
    Points
    23
    Par défaut encodage utf-8, remplacer 'é' en 'é' dans une string pour un fichier mal codé
    Bonjour,
    j'ai fais un script de comparaison de fichiers, or il arrive que les fichiers soient encodés de façon pas terrible, je voudrai rendre mon script plus tolérant.
    Voici le genre de chose sur laquelle je tombe:
    'é' qui est en fait un 'é'

    j'ai ouvert le fichier qui est bien en utf-8, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier_a = codecs.open(fichier_a_lien, encoding='utf-8')
    mais notepad++ ne fait pas mieux.

    en fait j'aimerai remplacer les 'é' par des 'é', mais comment?

    merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    avec la fonction replace ?
    Pas d'aide par mp.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par marco056 Voir le message
    avec la fonction replace ?
    merci pour ta réponse,

    j'ai déjà essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    convert = ligne.replace('é', 'é')
    et aussi comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    convert = ligne.replace('\xc3\xa9', 'é')
    mais il ne remplace rien

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par KR_Prog Voir le message
    en fait j'aimerai remplacer les 'é' par des 'é', mais comment?
    Normalement, c'est le décodage effectué à la lecture du fichier qui devrait transformer la séquence de bytes b'\xc3\xa9' en 'é'. Si cela ne le fait pas il est préférable d'essayer de comprendre pourquoi avant de trouver une solution palliative. Et donc poster un exemple de contenu de fichier et opérations que vous faites dessus pour reproduire ce résultat.

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

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Normalement, c'est le décodage effectué à la lecture du fichier qui devrait transformer la séquence de bytes b'\xc3\xa9' en 'é'. Si cela ne le fait pas il est préférable d'essayer de comprendre pourquoi avant de trouver une solution palliative. Et donc poster un exemple de contenu de fichier et opérations que vous faites dessus pour reproduire ce résultat.

    - W
    J'allais le proposer.
    Pas d'aide par mp.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Comme dit précédemment, vaut mieux corriger le problème à la source
    Sinon d'après ce que tu dis, tu es dans la situation où l'on te donne un "é" en utf8 dés le départ mais celui qui réceptionne (quelque part dans la chaine) , pense que c'est de l'iso-latin et transforme donc ton "iso latin" en utf8, ce qui donne:
    é de départ en utf8 => \xc3\xa9
    \xc3 en iso-latin => Ã qui en utf8 est => \xc3\x89
    \xa9 en iso-latin => © qui en utf8 est => \xc2\xa9

    Et donc en final, tu te retrouves avec: \xc3\x89 \xc2\xa9

    Si tu n'as vraiment pas le choix, une idée plus propre que le replace:
    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
    >>> YY
    'maman va à la plage'
    >>> try:
    ...     YY.encode("latin1").decode()
    ... except UnicodeError:
    ...     YY
    ... 
    'maman va à la plage'
    >>> XX
    'papa é la maison'
    >>> try:
    ...     XX.encode("latin1").decode()
    ... except UnicodeError:
    ...     XX
    ... 
    'papa é la maison'
    Cordialement.

Discussions similaires

  1. [XL-2013] Variable dans une formule pour autre fichier ouvert
    Par Zarkann dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/01/2017, 19h06
  2. Réponses: 1
    Dernier message: 13/08/2014, 11h32
  3. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  4. [RegEx] Remplacer des caractères dans une string
    Par jexl dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 22h26
  5. Réponses: 2
    Dernier message: 14/10/2005, 17h05

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