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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    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.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    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 : 84
    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 éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci, mais non, ça ne change rien.

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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

  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
    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 chevronné 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
    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.

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    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.

  8. #8
    Membre chevronné 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
    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...).

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

Discussions similaires

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

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