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

Langage Perl Discussion :

Détection d'encodage de fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut Détection d'encodage de fichier
    Bonjour,

    J'ai réalisé un script qui permet de convertir un fichier CSV en un fichier XML un peu particulier.

    Ce fichier XML doit être encodé en latin9 (ISO-8859-15)

    du coup le script donne en résumé cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    use Encode;
     
    open (FILE, "<:encoding(utf8)",$filein) || die "Ouverture impossible du fichier $ARGV[0]: $!";
    @lines = <FILE>;
    close (FILE);
     
    open(my $out,'>:encoding(latin9)',$outfile);
    for (my $i=0; $i<scalar(@lines); $i++)
    {
      print $out $line[$i];
    }
    close ($out);
    Le seul souci dans mon cas, c'est que je dois spécifier un encodage pour le fichier CSV d'entrée ici j'ai utilisé UTF-8.

    Existe-t-il une solution pour que le script détecte automatiquement le type d'encodage (UTF-8, ISOxxxxx) du fichier CSV?

    Max

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Le module Text::GuessEncoding ne fait pas ce que tu veux (j'en avais aussi cherché un), mais peut-être trouveras-tu dans son code source de quoi coder la devinette.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    En fait, le module Encode::Guess semble plus adapté...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    oulà...

    J'ai beau lire et relire la doc du module, j'arrive pas à comprendre comment ça marche...

    Je vais regarder cela.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    Bon... avec le code ci-dessous cela semble fonctionner:

    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
     
    use strict;
    use warnings;
    use Encode;
    require Encode::Detect;
     
    my @lines;
    my $string;
    my $stringout;
     
    open (FILE, "<",$ARGV[0]) || die "Ouverture impossible du fichier $ARGV[0]: $!";
    @lines = <FILE>;
    close (FILE);
     
    open(my $out,'>:encoding(latin9)',"result.txt");
    for (my $i=0; $i<scalar(@lines); $i++)
    {
    	$lines[$i] = encode("iso-8859-15", decode("Detect", $lines[$i]));
      print $out $lines[$i];
    }
    close ($out);
    Merci Philou67430

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

Discussions similaires

  1. [VB.NET]encodage de fichiers en ANSI
    Par m-mas dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 12/02/2007, 11h12
  2. Problème d'encodage de fichier
    Par djanggawul dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/01/2007, 21h26
  3. Déterminer l'encodage du fichier texte
    Par ze.Ninus dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 17h43
  4. encodage des fichier .html
    Par rasleboldesid dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/08/2006, 08h23
  5. [Eclipse 2.1] Encodage des fichiers pour un projet
    Par _-Sky-_ dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/05/2005, 23h26

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