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 de non prise en charge des caractère unicode dans le module HTML:PARSER


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 24
    Points
    24
    Par défaut Problème de non prise en charge des caractère unicode dans le module HTML:PARSER
    bonjours,
    voila, j'ai un fichier html qui contient dans son code source des caractère unicode sous forme " ’ ; " dans ce cas c'est l'apostrophe.
    lorsque je parse mon fichier html avec :

    open($fh, "<:utf8",$html_file) || die "...: $!";
    $te->parse_file($fh);

    il me renvoie des carre.....

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Pourquoi lis tu ton fichier en mode utf8 ? Apparemment il n'y a pas d'utf8 dedans, puisqu'on utilise les entités numériques. D'autant que ’ est un caractère de Latin-1 plutôt que d'utf8, c'est-à-dire un jeu de caractère sur 8 bits, à l'ancienne.

    En plus le
    il me renvoie des carre.....
    semble impliquer que tu fais un affichage quelconque par la suite. Es-tu certain que le problème n'est pas plutôt avec l'affichage ? Par exemple la console Windows n'est pas capable d'afficher l'unicode par défaut (et ne partage même pas la même codepage que le reste de windows (sic) ).

    --
    Jedaï

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    c'est pas le probleme d'affichage chez windows.
    puisque il suffit que j'applique une expression réguliere pour remplacer les cotes non afficher par les apostrophes. mais ce n'est pas une sollution radicale. puisque le probleme est que le parser ne reconnait pas tout ce qui est &#xxx ;.

    voilà ce que j'ai trouver sur le moteur Perl : span, sur le module Html:parser!

    Unicode

    The HTML:arser can parse Unicode strings when running under perl-5.8 or better. If Unicode is passed to $p->parse() then chunks of Unicode will be reported to the handlers. The offset and length argspecs will also report their position in terms of characters.

    It is safe to parse raw undecoded UTF-8 if you either avoid decoding entities and make sure to not use argspecs that do, or enable the utf8_mode for the parser. Parsing of undecoded UTF-8 might be useful when parsing from a file where you need the reported offsets and lengths to match the byte offsets in the file.

    If a filename is passed to $p->parse_file() then the file will be read in binary mode. This will be fine if the file contains only ASCII or Latin-1 characters. If the file contains UTF-8 encoded text then care must be taken when decoding entities as described in the previous paragraph, but better is to open the file with the UTF-8 layer so that it is decoded properly:

    open(my $fh, "<:utf8", "index.html") || die "...: $!";
    $p->parse_file($fh);

    If the file contains text encoded in a charset besides ASCII, Latin-1 or UTF-8 then decoding will always be needed.

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Relis ce que j'ai écris... Il n'y a pas d'Unicode dans ton fichier (en tout cas le fait que tu ais des entités numériques de latin1 semble l'indiquer), donc en indiquant à perl de lire le fichier en UTF8 il est normal que HTML::Parser disfonctionne, puisque tu lui dit que tu lui donne de l'utf8 alors que tu lui donnes du ASCII pur, avec des entités latin1 donc incompatibles avec utf8.

    --
    Jedaï

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    même on ouvrant le fichier sans designer l'encodage; le problème est toujour là.

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Quel problème ? Les entités ne sont pas décodées ?
    On parle bien de 'dtext' ici par exemple et pas de 'text' ? Peut-être pourrais-tu nous montrer le code qui pose problème plutôt que de nous laisser deviner ce que tu fais de façon erronée... Et dis nous quelle version de Perl et de HTML::Parser tu utilises, également.
    Enfin finalement y a-t-il des entités numériques au-dessus de 255 dans cette page ? Y a-t-il un encodage indiqué dans l'entête ?

    --
    Jedaï

Discussions similaires

  1. comment imprimer des caractères Unicode dans Matlab
    Par kruskal21 dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/01/2011, 16h19
  2. Réponses: 0
    Dernier message: 27/04/2010, 16h30
  3. désactiver la prise en charge des caractères
    Par argoet dans le forum Windows XP
    Réponses: 1
    Dernier message: 23/02/2009, 13h10
  4. Réponses: 12
    Dernier message: 04/04/2008, 16h24
  5. Réponses: 3
    Dernier message: 14/01/2008, 11h24

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