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 :

Deviner l'encodage d'un fichier TEXTE


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    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
    Par défaut Deviner l'encodage d'un fichier TEXTE
    Bonjour,
    je voudrais pouvoir deviner l'encodage d'un fichier TEXTE, ceci afin de permettre aux utilisateurs non avertis de mon projet d'avoir la possibilité d'utiliser des textes ne respectant pas l'UTF-8, pour bien entendu ensuite écraser leur fichier en un ayant pour encodage l'UTF-8, encodage avec lequel travaille mon projet.

    Il semblerait qu'il y ait une solution ici dans l'excellent "Dive Into Python 3".

    L'avez-vous testé ? En connaissez-vous d'autres ?

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

    As -tu lu les précautions d'emploi de chardet?

    Le problème de conception de fond est assez "basique", mais mérite de s'y attarder un peu.
    Règle 1: Un traitement sur "du texte" travaille avec de l'Unicode, i.e des caractères codés avec des entiers 16 bits (ou plus).
    Règle 2: Décoder le plus tôt possible et encoder le plus tard possible...

    Conséquence: on ne devine qu'en cas de désespoir, on garde l'encoding utilisé dans le cas "normal".

    Ce qui signifie:
    - pouvoir stocker/lire des documents dans n'importe quel encoding pour peu qu'on sache ce qu'il est (et que les codeurs/décodeurs existent).
    - UTF-8 est un standard de représentation de l'Unicode sous la forme de bytes. C'est très bien pour 'stocker', 'échanger', mais impropre aux traitements qui transforment la suite de bytes en suite de mots Unicode.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé

    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
    Par défaut
    Citation Envoyé par wiztricks
    Conséquence: on ne devine qu'en cas de désespoir, on garde l'encoding utilisé dans le cas "normal".
    C'est bien l'idée. L'utilisateur aura le choix de l'encodage à l'ouverture, et une recommandation lui sera faite de passer à du codage UTF-8 lors de l'enregistrement.
    Maintenant, pour un utilisateur qui n'y connait rien, qui ne sait pas ce qu'est un encodage, je proposerais via chardet des encodages possibles avec bien entendu un visuel à côté du fichier original avant toute modification. Au final, c'est l'utilisateur qui dira que l'encodage est bon et non mon programme.

    Citation Envoyé par wiztricks
    UTF-8 est un standard de représentation de l'Unicode sous la forme de bytes. C'est très bien pour 'stocker', 'échanger', mais impropre aux traitements qui transforment la suite de bytes en suite de mots Unicode.
    Je vois pas le problème. Avec Python 3 je ne manipule plus que des fichiers codés en UTF-8 sans aucun souci... Peux-tu préciser ton propos ? Il faut savoir que je vais travailler sur des fichiers TEXTE qui seront des documents rédigés par un humain pour des humains.

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

    Citation Envoyé par rambc Voir le message
    C'est bien l'idée. L'utilisateur aura le choix de l'encodage à l'ouverture, et une recommandation lui sera faite de passer à du codage UTF-8 lors de l'enregistrement.
    Je ne sais pas quel est l'IHM mais pour pour l'encoding de l'utilisateur est dans la locale ou la default locale... Et comme l'utilisateur sait rarement ce que c'est, je ne vois pas l'intérêt de lui poser une question à laquelle on aura une réponse incertaine alors qu'on peut avoir la réponse par ailleurs.

    Je vois pas le problème. Avec Python 3 je ne manipule plus que des fichiers codés en UTF-8 sans aucun souci... Peux-tu préciser ton propos ? Il faut savoir que je vais travailler sur des fichiers TEXTE qui seront des documents rédigés par un humain pour des humains.
    Dans Python 3 il y a des bytes (encodés utf-8 par défaut) et des strings Unicode (des séquences de codepoints).
    J'espère les traitements se font sur des strings Unicode et les résultats/entrées convertis en bytes à la lecture/écriture des fichiers.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éprouvé

    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
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Je ne sais pas quel est l'IHM mais pour pour l'encoding de l'utilisateur est dans la locale ou la default locale... Et comme l'utilisateur sait rarement ce que c'est, je ne vois pas l'intérêt de lui poser une question à laquelle on aura une réponse incertaine alors qu'on peut avoir la réponse par ailleurs.
    Hum, je ne te suis plus... J'ai été personnellement heurté au problème d'encodage lors de mon passage de Windaube à Mac O$. Une fois le problème repéré, j'avais utilisé NotePad+ sous Windaube pour passer de l'encodage Windaube cp... à de l'UTF-8. C'est ce genre de chose que je voudrais faire.

    Quant l'utilisateur qui ne sait rien sur les encodages, ce qui était mon cas sous NotePad++, et bien c'est à eux que je proposerais une aide via une fenêtre avec le fichier ouvert avec différents encodages que l'on pourra choisir dans une liste. On a un rendu direct et on peut dire qu'un encodage est bon dans la mesure où le rendu ne renvoie aucun caractère mystique.

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

    Citation Envoyé par rambc Voir le message
    Hum, je ne te suis plus... J'ai été personnellement heurté au problème d'encodage lors de mon passage de Windaube à Mac O$.

    Une fois le problème repéré, j'avais utilisé NotePad+ sous Windaube pour passer de l'encodage Windaube cp... à de l'UTF-8. C'est ce genre de chose que je voudrais faire.
    Répétons, répétons,... c'est la base de la pédagogie

    Un fichier contient (à priori) une suite de "bytes" représentant du texte.
    Exemple: Un script Python contenant autre chose que de l'ASCII doit être renseigné avec l'encoding pour être 'utilisable'.
    L'encoding "connu" convertir les bytes en Code Points Unicode ne pose aucun souci.
    S'il y a soucis, c'est dans la fonction inverse i.e. impossible d'écrire l'ensemble des Code Points Unicode en "bytes" Latin-1.

    Pire, la valeur d'un byte pourra correspondre à des glyphs différents si on passe de latin-1 en latin-10.

    Ceci dit si l'environnement "utilisateur" est configuré "latin-1", on sait l'encodage dans lequel seront récupérées les "'bytes" et celui dans lequel les écrire.

    Quant l'utilisateur qui ne sait rien sur les encodages, ce qui était mon cas sous NotePad++, et bien c'est à eux que je proposerais une aide via une fenêtre avec le fichier ouvert avec différents encodages que l'on pourra choisir dans une liste. On a un rendu direct et on peut dire qu'un encodage est bon dans la mesure où le rendu ne renvoie aucun caractère mystique.
    Le problème est que l'ensemble des traitements qui sont susceptibles de représenter la suite de "bytes" doivent savoir faire correspondre un entier ou une suite d'entiers à des "glyphs" bien particuliers.

    Ce qui suppose qu'on leur envoie des représentations dans un encoding particulier ou qu'on leur précise l'encoding dans lequel l'information est codée pour qu'il s'en accommodent.

    Exemple: Afficher le contenu du document avec l'utilitaire x ou y suppose que x et y sachent interpréter format et encodage... Et on a aussi envie que le document imprimé ressemble à ce qu'on voit sur l'écran, voir qu'on soit capable de faire des "cut" d'un bout de document qu'on paste dans un autre programme.

    Le codage de nos bytes (utf-8) ou autre dépendant aussi du media type, si cela n'a pas été un minimum "pensé" et "construit" pour que ce soit transparent, cela restera:
    - un casse tête sans fin pour l'utilisateur,
    - des tas d'ennuis côté assistance/maintenance/ajout de fonctionnalités

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

Discussions similaires

  1. AIX - Détecter l'encodage d'un fichier texte
    Par vbonnin dans le forum AIX
    Réponses: 1
    Dernier message: 22/08/2015, 12h22
  2. Détecter l'encodage d'un fichier texte
    Par Emcy dans le forum Algorithmes et structures de données
    Réponses: 32
    Dernier message: 27/01/2011, 14h34
  3. Réponses: 2
    Dernier message: 19/10/2009, 21h36
  4. Comment connaître l'encodage d'un fichier texte?
    Par sergentgarcia dans le forum Général Python
    Réponses: 3
    Dernier message: 26/05/2008, 10h41
  5. Gérer l'encodage d'un fichier texte
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 15/05/2007, 10h24

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