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 :

message d'erreur 'Wide character in print'


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut message d'erreur 'Wide character in print'
    Bonjour à tous,

    J'utilise le module Spreadsheet::ParseXLSX, afin de lire un fichier excel, cellule par cellule et de le recopier dans un fichier text.
    J'obtiens un message d'erreur, mais je ne sais pas pour lequel de mes fichiers, ni quelle cellule de celui-ci.
    Wide character in print at Excel_to_txt.pl line 36.
    Ligne du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $fh $cell->value();
    Quel test utiliser pour identifier l'origine du problème. Je soupçonne un caractère tel que µ ... mais, ça peut être autre chose.

    D'avance merci.
    -- Jasmine --

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    juillet 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : juillet 2014
    Messages : 83
    Points : 195
    Points
    195
    Par défaut
    Un problème d'encodage ??
    http://stackoverflow.com/questions/1...acter-in-print

    Tu as peut être des caractères non ascii dans ton fichier excel.
    Essaie d'ouvrir ton fichier en mode utf8 (cf lien)

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci, mais non, ça ne change rien.
    -- Jasmine --

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 456
    Points : 5 431
    Points
    5 431
    Par défaut
    Peut-être en ajoutant le pragma use open OUT => ':utf8'; (ou un autre encodage) au début de ton script, pour régler l'encodage par défaut des flux sortants (comme un fichier en écriture). lien perldoc
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Pour arrêter le débogueur sur l'émission d'un warning:

    http://perl.developpez.com/faq/perl/...tialized-value

  6. #6
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Attention, c'est le fichier sur lequel tu écris qu'il faut ouvrir en UTF-8. Par exemple (en utilisant la balise PRE au lieu de CODE car cette dernière échappe les caractères trop exotiques ):

    Taisha:~/perl/forum $ cat utf8.pl
    use strict; 
    use warnings;
    use utf8;
    print "こんにちは\n";
    Taisha:~/perl/forum $ 
    J'ai utilisé ci-dessus le pragma use utf8; pour insérer des chaînes de caractères en UTF-8 dans mon source. A l'exécution

    Taisha:~/perl/forum $ perl utf8.pl
    Wide character in print at utf8.pl line 4.
    こんにちは
    Taisha:~/perl/forum $ 
    on a un warning car STDOUT est ouvert par défaut en mode iso-8859-1 (aka latin-1, jeu de caractère standard de l'europe de l'ouest, limité à un octet par caractère, sachant qu'on veut écrire des caractères qui ne lui appartiennent pas...)

    On peut s'en sortir ici en ajoutant l'option -CO dans la ligne de commande, qui force l'ouverture de STDOUT avec un encodage UTF-8 :

    Taisha:~/perl/forum $ perl -CO utf8.pl
    こんにちは
    Taisha:~/perl/forum $ 
    Dans ton cas, si $fh n'est pas ouvert avec un encodage particulier, essaie d'invoquer ton programme avec l'option -Co (attention, le o est ici en minuscules), qui va faire en sorte que les fichiers ouverts en écriture le soient par défaut avec un encodage UTF-8. ALternativement, tu peux le préciser toi-même lors de l'ouverture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $fh, ">:encoding(UTF-8)", ...
    Dans les deux cas, le fichier produit sera encodé en UTF-8.

    Si le warning disparaît, cela signifiera qu'on a bien identifié le problème. Après, la suite à donner dépend de comment tu veux traiter le ou les caractères problématiques.
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci à tous pour vos réponses.

    Citation Envoyé par cmcmc Voir le message
    ALternativement, tu peux le préciser toi-même lors de l'ouverture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $fh, ">:encoding(UTF-8)", ...
    Merci cmcmc, cela fonctionne super bien ... j'ai fini par identifier le fichier posant problème, en appelant le script sur des 'tranches' de fichiers ... il a pourtant l'air comme tous les autres. Je l'ai créé via un autre programme, ainsi que tous les fichiers excel (traitement en masse) ... je ne vois vraiment pas pourquoi, celui-là en particulier, générait un message d'erreur.
    -- Jasmine --

  8. #8
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    houla houla houla danger, Will Robinson, danger !

    Citation Envoyé par Jasmine80 Voir le message
    je ne vois vraiment pas pourquoi, celui-là en particulier, générait un message d'erreur.
    à ta place j'essaierais de comprendre dès maintenant ce qui se passe car les fichiers texte que tu as produits sont maintenant encodés en UTF-8, et contiennent des caractères que tu ne t'attends probablement pas à y trouver. Tu risques des surprises (ou des ennuis) si tu traites les fichiers sans précautions dans d'autres programmes (perl ou autres) qui s'attendent à traiter des caractères ASCII, ou iso-8859-1, ou iso-8859-15 (linux), ou Windows-1252 (windows).

    Comme je l'écrivais plus haut, la suite à donner dépend de comment tu veux traiter le ou les caractères problématiques.

    Le cas le plus simple est celui ou tu t'attends à avoir des caractères ASCII. Par exemple pour un fichier contenant
    De l’ASCII –apparemment–, ‬mais...
    une analyse révèle quelques surprises
    Taisha:~/perl/forum $ perl -Mcharnames=:full -CIOio -0nE '
      END { 
        printf "[%s] \\x{%x} \\N{%s}\n", $_, ord($_), charnames::viacode(ord($_)) 
          for sort keys %h 
      } 
      ++$h{$_} for grep { ord($_) > 127 } split //
    ' test.txt
    [–] \x{2013} \N{EN DASH}
    [’] \x{2019} \N{RIGHT SINGLE QUOTATION MARK}
    [‬] \x{202c} \N{POP DIRECTIONAL FORMATTING}
    Taisha:~/perl/forum $ 
    Ici il conviendrait sans doute de transcoder les \N{EN DASH} en '-', les \N{RIGHT SINGLE QUOTATION MARK} en simple quote, et les \N{POP DIRECTIONAL FORMATTING} en espace (probablement...).
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  9. #9
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Tu risques des surprises (ou des ennuis) si tu traites les fichiers sans précautions dans d'autres programmes (perl ou autres) qui s'attendent à traiter des caractères ASCII, ou iso-8859-1, ou iso-8859-15 (linux), ou Windows-1252 (windows).
    Si j'utilise use utf8; dans mes programmes ultérieurs, cela n'est il pas la solution ?
    -- Jasmine --

  10. #10
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Si j'utilise use utf8; dans mes programmes ultérieurs, cela n'est il pas la solution ?
    Ca dépend... Les exemples que j'ai donnés (\N{EN DASH} et consorts) correspondent à des données réelles reçues de fichiers "texte" produits sur des machines Apple, que j'avais à transformer pour soumission à de vieux programmes qui n'acceptaient rien d'autre que de l'ASCII. Tant que tu ne sors pas de ton monde tout va bien (et encore...). Mais imagine que tu doives plus tard faire un split sur le signe moins ('-') mais que par suite d'une erreur de saisie quelqu'un ait utilisé à un moment donné un dash au lieu du moins, tu vas avoir des problèmes...

    Donc il me semble beaucoup plus propre de nettoyer tes fichiers le plus tôt possible, surtout si -- comme cela semble être le cas ici -- ce sont de simples fichiers de données et pas des textes richement formatés.

    Même le (simple ?) traitement des accents est étonnamment difficile. A moins que ce ne soit confidentiel dis nous quels caractères tu vois apparaître avec le programme donné ci-dessus, en reprenant la ligne de commande complète mais en remplaçant test.txt par ton (ou tes) fichier(s), voire simplement par chemin/vers/tes/fichiers/*.txt

    update
    j'avais lu trop vite ta question. use utf8; n'est même pas l'amorce du début d'une esquisse de solution, car cela ne touche que l'encodage de ton script, et en aucun cas l'encodage des fichiers que tu vas ouvrir ou utiliser (notamment pour ces derniers STDIN, STDOUT et STDERR). La bonne manière de traiter ces fichiers est soit d'utiliser le paramètre -C lors de l'appel du script comme ci-dessus (voir perlrun), soit expliciter le layer utilisé lors du open (exemple également ci-dessus), soit d'utiliser un pragma comme suggéré également dans ce fil par CosmoKnacki.
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  11. #11
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    A moins que ce ne soit confidentiel dis nous quels caractères tu vois apparaître avec le programme donné ci-dessus, en reprenant la ligne de commande complète mais en remplaçant test.txt par ton (ou tes) fichier(s), voire simplement par chemin/vers/tes/fichiers/*.txt
    Nom : error.jpg
Affichages : 1354
Taille : 153,6 Ko

    Il y a un problème avec les sauts de ligne ... je fais comment pour les enlever ? Qu'est-ce que je fais mal ? Je n'ai pas l'habitude d'utiliser la console.
    -- Jasmine --

  12. #12
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Il y a un problème avec les sauts de ligne ... je fais comment pour les enlever ? Qu'est-ce que je fais mal ? Je n'ai pas l'habitude d'utiliser la console.
    Oui c'est dur de travailler sous Windows... J'utilise un ensemble un peu complexe à base de Cygwin, NTEmacs et Strawberry Perl Portable que je documenterai peut-être un jour.

    Sauvegarde le code ci-dessous dans outofascii.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
    use warnings;
    use charnames qw(:full);
     
    my %h;
    while (<>) {
        ++$h{$_} for grep { ord($_) > 127 } split //
    }
     
    printf "[%s] \\x{%x} \\N{%s}\n", $_, ord($_), charnames::viacode(ord($_))
        for sort keys %h;
    et invoque le comme suit
    Taisha:~/perl/forum $ perl -CIOEioA outofascii.pl test.txt
    [–] \x{2013} \N{EN DASH}
    [’] \x{2019} \N{RIGHT SINGLE QUOTATION MARK}
    [‬] \x{202c} \N{POP DIRECTIONAL FORMATTING}
    Taisha:~/perl/forum $ 
    en remplaçant test.txt par tes fichiers ou chemin\vers\mes\fichiers\*.txt, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -CIOEioA outofascii.pl C:\Users\minguetj\Documents\test\output-test\DIXA-025.txt
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  13. #13
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci pour le temps que tu consacres à mon problème, voici le retour :
    Nom : error.jpg
Affichages : 1719
Taille : 20,8 Ko
    -- Jasmine --

  14. #14
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Merci pour le temps que tu consacres à mon problème, voici le retour :
    Nom : error.jpg
Affichages : 1719
Taille : 20,8 Ko
    Et à quoi correspondent ces caractères dans ton fichier .xlsx d'origine ? Apparaissent-ils dans des noms propres ou des termes techniques ? Et surtout, veux-tu les conserver sous cette forme ?
    • Si oui alors tu n'as rien à faire, sauf te préparer à traiter des fichiers encodés en UTF-8 de manière routinière. Et pour ça, bien que ce soit difficile, je te conseille de parcourir au moins une fois le Cookbook de Tom Christiansen
    • Si non, alors tu as probablement un problème d'encodage en amont qu'il va falloir approfondir
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  15. #15
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Oui, cela vient d'un nom et prénom et oui, j'aimerais les garder ainsi. Normalement, je n'ai plus rien à faire sur ces fichiers et mon collègue qui prend la relève m'a dit attendre de moi du utf-8 ... donc, tout baigne
    -- Jasmine --

  16. #16
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Super, merci.
    -- Jasmine --

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/04/2010, 14h57
  2. Problème de Wide character et de print :(
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 11/03/2006, 19h02
  3. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 15h54
  4. Réponses: 2
    Dernier message: 27/05/2002, 20h46

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