Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3050 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Détecter un champ en UTF-8

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Détecter un champ en UTF-8

n°2314059
Sethenssen
Posté le 16-04-2018 à 19:02:37  profilanswer
 

Bonjour,
 
C'est encore moi :)
 
Alors voilà, j'ai un fichier à parser avec des titres, certains malheureusement sont illisibles car en utf-8
Mon but est simplement de pourvoir les identifier et de ne pas les prendre en compte
 
Voici le code:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use Encode;
  6. use utf8;
  7. my $file = "data";
  8. if (-e $file) {
  9.         open (TOP, "<", $file);
  10.         while (<TOP> ) {
  11.                 chomp;
  12.                 my ($id, $name) = split(/\|/, $_);
  13.                 my $flag = utf8::valid($name);
  14.                 print "$flag|$id|$name", "\n";
  15.         }
  16.         close(TOP);
  17. }
  18. else {
  19.         print "No file", "\n";
  20. }


 
Le fichier source:

Code :
  1. TST0015108239|A Certain Point Of View Teaser 1
  2. TST0015112182|RNS 2009 - Soma Salegy 1
  3. TST0015113611|Otto act3
  4. TST0015113892|Clip - Morgan Priest : The future
  5. TST0015114112|Clip - Morgan Priest : L'action a un nouveau visage
  6. TST0015114974|Style and Tecknik (SNT) - Breakdance
  7. TST0015115312|Gis¦le
  8. TST0015116679|PAC MAN (REMI GAILLARD)
  9. TST0015120331|WakeBox Aquaboulevard de Paris
  10. TST0015116649|Yer Siyah, Gök Beyaz, Åžampiyonsun BeÅŸiktaÅŸ Marşı  Klarnet
  11. TST0015120553|Tuto application iPhone iPod remote
  12. TST0015121223|Hello Geekette - Teaser Saison 1
  13. TST0015122260|Miniature Replica Soldier - F.E.A.R. 2
  14. TST0013116679|La Boîte à  Bidouilles - Le téléphone high tech !


 
Je pensai qu'en utilisant utf8::valid($string) il allait me dire avec booléen si oui ou non le champ était en UTF-8
Mais il me répond 1 à chaque fois
Je m'attendais à pouvoir identifier la ligne 10 et 14 mais là en fait non.
 
Merci d'avance pour votre aide future

mood
Publicité
Posté le 16-04-2018 à 19:02:37  profilanswer
 

n°2314070
gilou
Modérateur
Modzilla
Posté le 17-04-2018 à 00:03:24  profilanswer
 

Toute tes chaînes sont en utf8. Il est donc logique que utf8::valid renvoie 1 dans tous les cas.
Ce que tu veux tester, si j'ai bien compris, c'est si ces chaînes sont représentables dans l'encoding de la console de ta machine.
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use Encode qw(decode);
  6. use utf8;
  7.  
  8. open my $file, "<", "data8.txt";
  9. while (<$file> ) {
  10.    $_ = decode("utf8", $_);
  11.    print if (utf8::downgrade($_, 1));
  12. }


 
Ça donne en sortie:
 

TST0015108239|A Certain Point Of View Teaser 1
TST0015112182|RNS 2009 - Soma Salegy 1
TST0015113611|Otto act3
TST0015113892|Clip - Morgan Priest : The future
TST0015114112|Clip - Morgan Priest : L'action a un nouveau visage
TST0015114974|Style and Tecknik (SNT) - Breakdance
TST0015116679|PAC MAN (REMI GAILLARD)
TST0015120331|WakeBox Aquaboulevard de Paris
TST0015120553|Tuto application iPhone iPod remote
TST0015121223|Hello Geekette - Teaser Saison 1
TST0015122260|Miniature Replica Soldier - F.E.A.R. 2


decode("utf8", $_) va mettre tes données dans la représentation interne de Perl (normalement en utf8 aussi, vu le use utf8, mais ça marchait pas directement, même en forçant la lecture du fichier en utf8, je ne sais pas trop pourquoi, donc je force le décodage après une lecture en mode caractère), et utf8::downgrade($_, 1) va rendre faux si la dégradation en donnée dans l'encoding de la machine (cp850 sur ma machine) est avec pertes, donc si la chaîne initiale n'est pas directement utilisable.
 
A+,


Message édité par gilou le 17-04-2018 à 00:14:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2314076
Sethenssen
Posté le 17-04-2018 à 10:54:17  profilanswer
 

C'est parfait !
Merci Gilou


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Détecter un champ en UTF-8

 

Sujets relatifs
[Perl] Module JSON / Lire un fichierDelphi / TurboPascal : Detecter si un application est utiliser (focus)
[Perl] Remplacer plusieurs lignes par le résultat d'un appel externe[VBA/HTML] SET de champ qui marche en F8 mais pas en F5
[PERL] remplacer un mot dans un fichier[Perl] Comparaison de fichiers
Récupération d'un champ pour updateexpression régulière avec perl
optimisation script perlImport CSV et encodage en UTF-8
Plus de sujets relatifs à : [Perl] Détecter un champ en UTF-8


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR