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 fichier csv problématique sous windows


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut encodage fichier csv problématique sous windows
    Bonsoir,

    Je crée des fichiers csv à partir d'un seul.
    Tout fonctionne à merveille sous linux.
    Ces fichiers csv créés sont en utf-8, comme tout le reste, d'ailleurs.

    Le souci se situe avec Windows.
    De façon étrange, lorsque le contenu possède des caractères accentués, ils ne sont pas reconnus.
    Ainsi, je souhaite par exemple remplacer "créée" par "cr" et ceci ne fonctionne pas sous windows. "créée" reste tel quel.

    Il n'y a aucun message d'erreur mais les résultats ne sont pas identiques.
    Je souhaiterais que des collègues puissent faire tourner mon programme sous Windows mais ce n'est pas possible actuellement.

    Des idées ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Pourriez-vous, s'il vous plaît, fournir un code minimal fonctionnel ?

    Sous quelle version de python êtes-vous, coté Linux et coté Windows ?

    Merci

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par chticricri Voir le message
    Bonjour

    Pourriez-vous, s'il vous plaît, fournir un code minimal fonctionnel ?

    Sous quelle version de python êtes-vous, coté Linux et coté Windows ?

    Merci

    J'avance : j'ai réussi à faire tourner le programme sous windows et sous linux mais en réenregistrant le fichier csv (il est à l'origine en xls).
    Sous Windows (version 8, chez moi), le fichier est encodé de façon automatique en latin1 et non en utf-8, comme le fait linux autyomatiquement.

    Je travaille avec Python3, sous windows et linux.

    Si je n'arrive pas à faire ce que je veux, j'essaierai de fournir un code mais pour l'instant, je pense savoir ce qu'il faut que je fasse :
    Il faudrait que, lorsque je le système détecte la version windows (cela, c'est facile), le fichier csv, initialement encodé en latin1, soit encodé en utf8. Est-ce possible ?

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    A la base, je travaille avec un fichier téléchargé sur le net et lorsqu'il est téléchargé puis converti via excel en csv, il est codé en latin1 avec windows.

    Si j'utilise ce fichier sous linux, j'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 46: invalid continuation byte

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Pour éviter les erreurs je conseillerais de lire et écrire en mode binaire, car l'encodage ne se fait pas toujours sur un octet (caractères accentués), il est donc conseillé de comparer octet par octet, en se mettant en mode 'rb', recevoir des bytes, comparer et faire une transformation d'octets (bytes) en str, par le biais de mesbytes.decode("utf8") pour un affichage à l'écran.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci pour ce conseil mais j'ai des fichiers de 120 lignes et 30 colonnes environ que je ne traite pas en bloc car les cellules doivent être traitées séparément. Du coup, je crains que ce soit lourd.

    En fait, j'ai réussi à faire ce que je voulais. Sauf que j'ai dû modifier tout mon code et faire une version pour linux et une autre version pour windows. Cela ne me convient que moyennement.

    Pour que cela fonctionne, il a fallu que je mette, sous Windows, un codage du fichier python en latin1.
    De plus, mes fichiers csv finaux sont traités par un autre programme (LaTeX) et du coup, il faut aussi que j'adapte cela (je l'ai fait mais c'est un peu lourd).

    Pour que ce soit simple, j'ai deux choix à mon avis si c'est possible (comme je connais mal Windows, je ne sais pas trop) :
    - convertir le fichier .csv codé en latin1 en codage utf8
    - convertir mes fichiers .tex (c'est comme du .txt) d'utf8 en latin1

    Si quelqu'un connaît la réponse à une des deux possibilités, je suis preneur.

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

Discussions similaires

  1. Encodage fichier csv sous Linux
    Par cisnake dans le forum Tomcat et TomEE
    Réponses: 16
    Dernier message: 24/01/2014, 14h27
  2. Mon fichier gtkrc fonctionne sous windows mais pas sous Linux !
    Par Kicker dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 24/04/2009, 12h54
  3. Réponses: 7
    Dernier message: 09/09/2007, 15h34
  4. Copier des fichiers en Perl sous Windows XP
    Par Pauli dans le forum Langage
    Réponses: 1
    Dernier message: 19/02/2007, 09h40
  5. [TP] Création fichier texte lisible sous Windows
    Par frechy dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 02/03/2006, 20h42

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