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 :

Problème d'accentuation sur la récupération d'une page web


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut Problème d'accentuation sur la récupération d'une page web
    Bonjour,

    J'ai un problème de retour des caractère accentué qui ne fonctionne pas.
    Pouvez vous m'orienter vers une solution ?
    Mon code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    use strict;
    use utf8;
    use warnings qw(all);
     
    use Data::Dumper;
    use Encode;
    use LWP;
     
    my $href;
    my @ligne;
    my $a;
     
        my $url = 'http://export.openstreetmap.fr/contours-administratifs/communes/';
        my $ua = LWP::UserAgent->new;
        $ua->agent( 'Mozilla/5.0' );
        my $response = $ua->get( $url );
        $response->decoded_content((charset => 'utf-8'));
        my $content = $response->content;
        $content = decode( 'utf-8', $content ); # la page est en utf-8, alors on decode l'utf-8
    #    print Dumper($content);
        @ligne = split(/\n/,$content);
        foreach $a (@ligne){
    #        print $a."\n";
                if ($a =~ /<td><a href="([0-9].+gz)">.*<\/a>/) {
                    $href = $1;
                    my $url_shp = "http://export.openstreetmap.fr/contours-administratifs/communes/".$href;
                    print $url_shp."\n";
                }
        }
    Voilà le type de retour que j'ai : http://export.openstreetmap.fr/conto...ommunes/07-Ard%c3%a8che.shp.tar.gz

    Merci d'avance pour votre retour
    Franpom

  2. #2
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tr><td valign="top"><img src="/icons/compressed.gif" alt="[   ]"></td><td><a href="07-Ard%c3%a8che.shp.tar.gz">07-Ardèche.shp.tar.gz</a></td><td align="right">05-Jan-2014 19:18  </td><td align="right">2.7M</td><td>&nbsp;</td></tr>
    J'ai regardé la page il n'y a pas de CHARSET !
    Mais peu importe...

    Les noms dans le href sont codés en dur avec des % :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="07-Ard%c3%a8che.shp.tar.gz">
    Pour construire le nom du fichier, il te faut prendre la zone qui suit le .gz">

  3. #3
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Je découpe comme un cochon, d'autre ici plus expérimentés te donneront de meilleures solutions...

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    use strict;
    use utf8;
    use encoding 'utf8';
    use warnings qw(all);
     
    use Data::Dumper;
    use Encode;
    use LWP;
     
    ActiverAccentDOS();
    sub ActiverAccentDOS {
      my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
      foreach my $h ( \*STDOUT, \*STDERR, \*STDIN ) {
        binmode $h, ":encoding(cp$codepage)";
      }
    }
     
    my $href;
    my @ligne;
    my $a;
     
        my $url = 'http://export.openstreetmap.fr/contours-administratifs/communes/';
        my $ua = LWP::UserAgent->new;
        $ua->agent( 'Mozilla/5.0' );
        my $response = $ua->get( $url );
        $response->decoded_content((charset => 'utf-8'));
        my $content = $response->content;
        $content = decode( 'utf-8', $content ); # la page est en utf-8, alors on decode l'utf-8
     
    #    print Dumper($content);
        @ligne = split(/\n/,$content);
        foreach $a (@ligne){
    #			print $a."\n";
    			my @RepT = split /gz\">/, $a;
    			if ( $RepT[1] ) {
    				#	print $RepT[1] ."\n";
    				@RepT = split /<\/a><\/td>/, $RepT[1];
    				my $url_shp = "http://export.openstreetmap.fr/contours-administratifs/communes/".$RepT[0];
    				print $url_shp."\n";
    			} 
        }
     
    =pod
     
     
    <tr><td valign="top"><img src="/icons/compressed.gif" alt="[   ]"></td><td><a href="07-Ard%c3%a8che.shp.tar.gz">07-Ardèche.shp.tar.gz</a></td><td align="right">05-Jan-2014 19:18  </td><td align="right">2.7M</td><td>&nbsp;</td></tr>

  4. #4
    Membre averti
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut
    Merci pour t'as réponse, mais ça ne marche pas directement :
    Moi j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[   ]\"></td><td><a href=\"09-Ari%c3%a8ge.shp.tar.gz\">09-Ari\x{e8}ge.shp.tar.gz</a></td><td align=\"right\">06-Jan-2014 19:19  </td><td align=\"right\">853K</td><td>&nbsp;</td></tr>
    Donc même après le href, j'ai les codes hexa de l'utf8

    Quand j’exécute ton script : j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Can't exec "chcp": Aucun fichier ou dossier de ce type at ./creation_kml-test.pl line 13.
    Use of uninitialized value in pattern match (m//) at ./creation_kml-test.pl line 13.
    Use of uninitialized value $codepage in concatenation (.) or string at ./creation_kml-test.pl line 15.
    Cannot find encoding "cp" at ./creation_kml-test.pl line 15.
    Use of uninitialized value $codepage in concatenation (.) or string at ./creation_kml-test.pl line 15.
    Edit : Normal cela ne fonctionne que sous windows mais sous linux il y a une solution : http://perl.developpez.com/faq/perl/?page=Terminal

    Merci pour la voie que tu m'a ouverte :
    Voilà la solution grâce au lien du dessus :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #!/usr/bin/env perl
    use strict;
    use utf8;
    use encoding 'utf8';
    use warnings qw(all);
     
    use Data::Dumper;
    use Encode;
    use LWP;
     
    ActiverAccents();
    sub ActiverAccents {
        my $encodage;
        # Windows
        if ( lc($^O ) eq 'mswin32') {
            eval {
                my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
                $encodage = "cp$codepage";
                foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
                    binmode $h, ":encoding($encodage)";
                }
            };
        }
        else {
            $encodage = `locale charmap`;
            eval {
                foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
                    binmode $h, ":encoding($encodage)";
                }
            };
        }
      return $encodage;
    }
    my $href;
    my @ligne;
    my $a;
     
        my $url = 'http://export.openstreetmap.fr/contours-administratifs/communes/';
        my $ua = LWP::UserAgent->new;
        $ua->agent( 'Mozilla/5.0' );
        my $response = $ua->get( $url );
        my $content = $response->content;
        $content = decode( 'utf-8', $content ); # la page est en utf-8, alors on decode l'utf-8
     
    #    print Dumper($content);
        @ligne = split(/\n/,$content);
        foreach $a (@ligne){
    #           print $a."\n";
                my @RepT = split /gz\">/, $a;
                if ( $RepT[1] ) {
                    #   print $RepT[1] ."\n";
                    @RepT = split /<\/a><\/td>/, $RepT[1];
                    my $url_shp = "http://export.openstreetmap.fr/contours-administratifs/communes/".$RepT[0];
                    print $url_shp."\n";
                }
        }

  5. #5
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Oui, pardon, j'étais un peu pressé et j'ai omis de préciser que j'étais sous W7 et d'où provenait ActiverAccents() ...
    Merci d'avoir collé le lien de la boîte à outils, celle de developpez pas celle de Hollande

    Si c'est [Résolu] pense à cliquer sur le bouton qui va bien

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

Discussions similaires

  1. Récupération d'une page web : problème d'encodage
    Par Ceubex dans le forum Langage
    Réponses: 6
    Dernier message: 11/10/2014, 23h39
  2. executer une commande sur un serveur depuis une page web
    Par nico33410 dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 21/04/2007, 19h02
  3. Action sur le serveur via une page web
    Par raphxyz dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 26/08/2006, 18h07
  4. Réponses: 10
    Dernier message: 26/01/2005, 19h48
  5. Comment Appuyer sur le bouton d'une page web...?
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/01/2005, 14h07

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