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 :

transformation de caractére


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut transformation de caractére
    Bonjour,

    J'ai une question concernant les caractéres "^, é,è...".

    en effet si par exemple, je saisie le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "Lancement de la tâche préconisé \n" ;
    j'ai le résultat suivant à l'affichage :

    "Lancement de la tÔche prÚconisÚ batch".

    Comment puis je palier au probléme pour récupérer la bonne police de caractére.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ta question porte sur le codage des caractères et pas sur la police.
    Pour y répondre correctement, il faudrait connaitre le médium sur lequel tu fais l'écriture (terminal et de quel type, fichier, ... ?).
    Pour résoudre ce type de problème, il faut régler correctement l'encodage en sortie de manière compatible à l'encodage supporté par le médium. Par défaut, si je ne fais pas erreur, l'encodage est UTF-8.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Si c'est au sujet du terminal DOS, la réponse est ici.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    J'ai bien récupéré le code pour sortir un affichage des caractéres correctes sous dos et cela fonctionne (utf-8).

    Cependant, je redirectionne le résultat de mon affichage dans un fichier txt que j'ouvre avec notepad en utf-8 et là, mes caractéres sont encore illlisibles.
    Si je me connecte en mode dos, et que je réalise un type de ce meme fichier, alors les caractéres sont lisibles.

    Auriez vous une idée ?
    merci d'avance

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Quand tu écris ton texte dans le fichier, il faut préciser (à l'aide d'un layer par exemple) l'encodage du fichier.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $TXT, ">:encoding(utf8)", "fichier.txt";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    binmode $TXT, ":encoding(utf8)";
    Mais je ne suis pas sûr que ce soit là ton problème.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    dans mon code, j'ouvre un fichier en écriture pour y insérer le résultat de ma variable. A quel moment, je lui insére ta ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    open (FIC_LOG, ">>$FicLog") ;				
        print FIC_LOG "@Resultat\n" ;								
    close (FIC_LOG);

    Code :
    open my $TXT, ">:encoding(utf8)", "fichier.txt";ou

    Code :
    binmode $TXT, ":encoding(utf8)";Mais je ne suis pas sûr que ce soit là ton problème.

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    open (FIC_LOG, ">>$FicLog") ;				
    binmode FIC_LOG, ":encoding(le_bon_code)";
        print FIC_LOG "@Resultat\n" ;								
    close (FIC_LOG);
    En remplaçant le_bon_code par le bon codage de caractère.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    j'ai bien pris note de ce que tu as noté.

    mais maintenant dans mon fichier, au lieu d'avoir écrit tâche, il y a tche. le caractére "â" a été supprimé.

    Merci d'avance
    Si vous avez une piste

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Peux-tu mettre en pièce jointe ce fichier résultat ?
    Avec quel outil le visualises-tu ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #10
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Voici les deux fichiers.

    J'essaye de l'ouvrir avec notepad.

    merci pour ton aide
    Fichiers attachés Fichiers attachés

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Le codage de ton fichier fic_apres_binmode.txt me semble incorrect, car pour le caractère â, il code C2 83 au lieu de C3 A2 (caractère unicode 0x00E2).

    As-tu bien utilisé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    binmode FIC, "encoding(utf8)";
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  12. #12
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    Voici le programme !

    je saisie mon code en mode utf8 à travers notepad, puis je l'enregistre.

    merci pour ton aide, parce que là, je cale !!
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Notepad n'est pas ce que l'on pourrait appeler un modèle d'inter-opérabilité. Je ne sais pas vraiment si le codage qu'il utilise est un vrai UTF8 standard...

    Par ailleurs, quand tu dis
    je saisie mon code en mode utf8
    tu veux dire que tu saisis ton script perl sous Notepad ?
    Mais... le script ne contient pas de caractères UTF8 qui seront affichés dans FIC_LOG, cela n'a donc que peu d'importance.
    L'important, c'est de savoir dans quel encodage le programme "C:/PRODUITS/programme1.exe" affiche ses données sur la sortie standard.
    C'est sans doute là que se situe ton problème.

    Pourrais-tu exécuter ton script en remplacer
    `$ADA_TASK -name $Param -execute`
    par
    `$ADA_TASK -name $Param -execute >toto.txt`

    et mettre en pièce jointe, le fichier toto.txt qui devrait être créé.

    Je commence aussi à caler
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  14. #14
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    voici le fichier log.txt

    A noter que dans mon script perl, je voulais faire des "print" où l'intérieur, j'avais des caractéres accentués, d'où la présence de l'utf8 dans mon script perl.
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt log.txt (830 octets, 43 affichages)

  15. #15
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    C'est drôle, ca a la couleur, l'odeur, l'apparence du CP-437, mais ...

    Comme si une conversion CP-437->Unicode avait été merdée...

    D'où sort son programme1.exe ?

    Lilian.

  16. #16
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    En vérifiant avec un lecteur compatible CP-437, je confirme que j'ai le fichier en clair ; au moins pour le texte et les caractères accentués.
    Ca l'est moins pour les retour chariots, mais je penche pour un soucis avec la redirection '>'.

    Peux tu nous en dire plus sur ton programme1.exe ?

    Lilian.

  17. #17
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Désolé, mais en fait tout est en clair avec le bon vieil editeur MS-DOS (aka edit)

    J'espère que ca va pouvoir t'aider

    Lilian.

  18. #18
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    mon programme exe émane d'un éditeur de logiciel.

    en effet, si on fait une type du fichier sous dos, tous sort correctement. Le probleme, avec wordpad ou le bloc note : l'affichage n'est pas correcte.

  19. #19
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Si tu disposes de cygwin, installe le module iconv (si ce n'est pas fait).
    Tu pourra lancer ton programme de cette manière:
    c:/ton_chemin/programme1.exe | iconv -f CP437 -t UTF-8
    et récupérer quelque chose d'exploitable.


    Essais de voir avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (RES, "c:/chemin/programme1.exe |", ":encoding(437)");
    Il m'arrive d'utiliser cette forme d'ecriture pour exploiter le resultat d'un binaire, mais je n'ai jamais essayé avec le paramètre 'encoding'.

    Je pense que Philou sera plus adapté que moi pour la suite de la réponse.

    Lilian.

  20. #20
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par lilian_h Voir le message
    Essais de voir avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (RES, "c:/chemin/programme1.exe |", ":encoding(437)");
    Disons plutôt cela (inclure le cp dans le nom de l'encodage)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (RES, "c:/chemin/programme1.exe |", ":encoding(cp437)");
    Et merci lilian

    Edit : une petite question à lilian : tu reconnais l'encodage par lecture manuelle, ou bien tu utilises un outil particulier ? (file, autre ?)
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Transformation des caractères accentués
    Par stounouslous dans le forum NetBeans
    Réponses: 9
    Dernier message: 29/09/2010, 17h14
  2. [SQL-Server] Chaine vide transformé en caractère blanc
    Par breizping dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/07/2008, 13h39
  3. Réponses: 1
    Dernier message: 26/09/2007, 19h38
  4. Réponses: 4
    Dernier message: 20/12/2006, 14h04
  5. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/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