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 :

Comment reconnaitre l'encodage d'un fichier à l'ouverture


Sujet :

Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Comment reconnaitre l'encodage d'un fichier à l'ouverture
    Bonjour,
    je me demandais s'il existait un module en python qui permette de reconnaitre l'encodage d'un fichier. Je peux facilement déterminer si un fichier est UTF 16 BE ou LE en analysant les deux premiers bytes du fichier quand celui ci est Bommé. (Le module Codecs possède des constantes qui identifient le bommage) La difficulté commence avec les fichiers UTF-16 non Bommé, mais la encore je m'en sors en analysant si le fichier est codé sur 16 bits (De la forme 0x00 0x?? 0x00 0x?? etc...) La réelle difficultée arrive quand les fichiers sont codés en UTF-8 car à part quand le BOM spécifique UTF-8 (0xEF, 0xBB, 0xBF) est présent, ce qui est très rare, je ne vois pas comment determiner l'encodage d'un tel fichier. Quelqu'un connaitrait il une solution.
    Merci.
    Xav.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    La difficulté commence avec les fichiers UTF-16 non Bommé, mais la encore je m'en sors en analysant si le fichier est codé sur 16 bits (De la forme 0x00 0x?? 0x00 0x?? etc...)
    Cela n'identifie en rien l'utf-16be.
    Si y'avait toujours des octets vides, ça servirait à rien... Après si tu es certain que le fichier doit commencer par des caractères ASCII (comme un fichier xml), ça marche.

    je ne vois pas comment determiner l'encodage d'un tel fichier
    Il n'est pas possible de détecter de façon satisfaisante quel est l'encodage d'une donnée.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Cela n'identifie en rien l'utf-16be.
    Si y'avait toujours des octets vides, ça servirait à rien... Après si tu es certain que le fichier doit commencer par des caractères ASCII (comme un fichier xml), ça marche.
    Je suis entierement d'accord avec toi que l'UTF-16 n'est pas toujours de la forme 0x00 0x?? 0x00 0x?? (0x03 0x?? 0x03 0x?? ou 0x04 0x?? 0x04 0x?? pour le Grec par exemple), c 'était juste pour donner un exemple de ce que j'essaye de deviner à l'ouverture d'un fichier en analysant une suite d'octets.

    Mais certains éditeurs de texte arrive à savoir l'encodage d'un fichier (ne serait ce que Notepad) et je me demandais comment ils le faisaient et si quelqu'un avait implémenté un module python permettant ce genre de chose.

    Merci néanmoins de ta réponse.
    Xav.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Pour notepad c'est pas tout à fait vrai.

    Notepad reconnait les deux premiers bytes pour identifier UTF-8 ou 16 et en dehors de ça il affiche le texte avec le codepage par défaut de l'OS, shift-JIS au japon, ou bien l'équivalent win du latin 9 en europe

    Si certains logiciels proposent des indetifications automatiques c'est souvent plus ou moins aléatoire et je pense que c'est basé sur des algos qui jouent aux devinettes. Lisant le fichier, il cherche à détecter des bytes d'échappement pour voir si il a affaire à un charset du type shift-JIS ou euc-JIS, ou alors il regarde les plages utilisées... à mon avis c'est une vraie recette de cuisine...

    ce qu'il faudrait voir c'est s'il existe des librairies déjà existantes pour faire ça

    jedit propose un choix impressionnant d'encodages et un algo de détection auto (très foireux mais c'est un début).. comme il est open source tu peut toujours y jetter un oeil ^^

Discussions similaires

  1. Comment connaitre l'encodage d'un fichier ?
    Par FyndWyre dans le forum Général Python
    Réponses: 5
    Dernier message: 06/07/2010, 14h22
  2. 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
  3. Comment modifier l'encodage des fichiers sources ?
    Par ChPr dans le forum NetBeans
    Réponses: 2
    Dernier message: 01/05/2007, 21h16
  4. Comment reconnaitre un fichier texte
    Par Shin no Noir dans le forum C
    Réponses: 11
    Dernier message: 19/12/2005, 21h13
  5. Réponses: 5
    Dernier message: 20/08/2002, 18h01

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