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 :

Forcer le charset CP1252 pour la console batch !


Sujet :

Langage Perl

  1. #1
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut Forcer le charset CP1252 pour la console batch !
    Bonjour à tous.

    J'ai installé ActivePerl sur mon ordinateur, la version 5.24.1 afin de m'y remettre.

    Quand je lance un script Perl, c'est la console batch windows qui s'ouvre avec le charset CP850, or je voudrais utiliser le charset CP1252 (Windows-1252).
    Pour modifier ce charset, je mets dans le script : "system('chcp 1252 > nul');" et j'obtiens bien le bon jeu de caractères.
    Or en faisant cela, j'exécute une commande batch de windows.

    J'aurai aimé savoir s'il n'existe pas quelque chose d'équivalent en Perl ?
    J'ai essayé "binmode (STDOUT, "encoding(:cp1252)");" mais je n'obtiens pas à l'affichage ce que je désire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Je pense que tu peux t'inspirer de Ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #==============================================================
    # Pour avoir les accents sur la console DOS
    # http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
    #==============================================================
    sub ActiverAccentsDOS {
    	my $encodage;
    	# Windows
      	if ( lc($^O ) eq 'mswin32') {
    		eval {
    			my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
    			$encodage = "cp$codepage";
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
    	else {
    		$encodage = `locale charmap`;
    		eval {
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
      return $encodage;
    }
     
    #Sinon :
    #ü 	\x81 	à 	\x85 	è 	\x8A
    #é 	\x82 	ç 	\x87 	ï 	\x8B
    #â 	\x83 	ê 	\x88 	î 	\x8C
    #ä 	\x84 	ë 	\x89
    En forçant à cp1252, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $encodage = 'cp1252';
    eval {
    	foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    		binmode $h, ":encoding($encodage)";
    	}
    };

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Merci pour le lien, mais ce n'est pas exactement ce que je recherche à faire.

    Je me suis mal exprimé au sujet de ce que je veux faire.
    Je ne cherche pas à convertir le jeu des caractères de mon fichier dans celui de la console windows.
    Je cherche à modifier le charset utilisé par la console.

    Autrement dit, la console utilise le "cp850" et je désire à la place utilisé le "cp850".

    Avez-vous besoin d'un exemple pour illustrer mon problème ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Boujour,
    J'avoue que j'ai du mal avec ta réponse #3
    mais c'est moi qui dois être collé à une idée fixe

    Le bout de code extrait de la fonction ActiverAccentsDOS() de la FAQ ne modifie pas de fichier mais l'encodage de l'invite de commande Windows, Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    use strict;
    use warnings;
     
    my $CodeActu = `chcp`;
    print "\nCODEACTU=$CodeActu\n";
    print "AVEC ACTUEL : évènement éèàïô\n";
     
     
    InviteCommandeWindows(850);
    print "AVEC cp850 : évènement éèàïô\n";
     
    InviteCommandeWindows(1252);
    print "AVEC cp1252 : évènement éèàïô\n";
     
     
    sub InviteCommandeWindows {
     
    	my $encodage = "cp@_";
    	print "\nENCODAGE DEMANDÉ= $encodage\n";
    	eval {
    		foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    			binmode $h, ":encoding($encodage)";
    		}
    	};
     
    }
    Voir image ci-dessous, et lorsque on sort du pgm perl on retrouve bien le codage initial...
    Donc un exemple serait bienvenu, mais je ne te promets pas de décoller pour autant !

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Déjà entre votre environnement et le mien, il y a une différence de comportement.
    Je suis sous windows 10 pro et quand je demande quel est le charset utilisé dans la console batch windows, j'ai bien le cp850 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Microsoft Windows [version 10.0.14393]
    (c) 2016 Microsoft Corporation. Tous droits réservés.
     
    C:\Users\Patron>chcp
    Page de codes active*: 850
     
    C:\Users\Patron>
    Ce fichier est encodé en CP850.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use 5.24.1;
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    system("pause");
    exit;
    Voici ce que j'obtiens si je désire affichier les 255 caractères, en conformité de ce script perl en CP850:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
     8 :  Ç   ü   é   â   ä   à   å   ç   ê   ë   è   ï   î   ì   Ä   Å
     9 :  É   æ   Æ   ô   ö   ò   û   ù   ÿ   Ö   Ü   ø   £   Ø   ×   ƒ
    10 :  á   í   ó   ú   ñ   Ñ   ª   º   ¿   ®   ¬   ½   ¼   ¡   «   »
    11 :  ¦   ¦   ¦   ¦   ¦   Á   Â   À   ©   ¦   ¦   +   +   ¢   ¥   +
    12 :  +   -   -   +   -   +   ã   Ã   +   +   -   -   ¦   -   +   ¤
    13 :  ð   Ð   Ê   Ë   È   i   Í   Î   Ï   +   +   ¦   _   ¦   Ì   ¯
    14 :  Ó   ß   Ô   Ò   õ   Õ   µ   þ   Þ   Ú   Û   Ù   ý   Ý   ¯   ´
    15 :  *   ±   =   ¾   ¶   §   ÷   ¸   °   ¨   ·   ¹   ³   ²   ¦   *
     
     
    é àèù âêîôû äëïöüÿ
    Appuyez sur une touche pour continuer...
    L'affichage me donne bien le charset CP850 à la console,et mes deux lignes du bas sont illisibles.
    J'ai recopié le contenu de l'écran, mais dans le message de Développez, je n'obtiens pas ce que j'ai à la console.
    Pour les autres exemples, l'affichage du charset est conforme en terme de lisibilité.

    Voici le nouveau script perl, encodé cette fois-ci en windows-1252 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use 5.24.1;
     
    binmode (STDIN,  "encoding(:cp850)");
    binmode (STDERR, "encoding(:cp850)");
    binmode (STDOUT, "encoding(:cp850)");
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..7,8..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöü ç\n";
     
    system("pause");
    exit;
    Et voici ce que j'obtiens à l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
    "\x{0080}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0081}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0082}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0083}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0084}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0085}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0086}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0087}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0088}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0089}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{008a}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{008b}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{008c}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{008d}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{008e}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{008f}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
     8 :  \x{0080}   \x{0081}   \x{0082}   \x{0083}   \x{0084}   \x{0085}   \x{0086}   \x{0087}   \x{0088}   \x{0089}   \x{008a}   \x{008b}   \x{008c}   \x{008d}   \x{008e}   \x{008f}
     
    "\x{0090}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0091}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0092}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0093}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0094}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0095}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0096}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0097}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0098}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{0099}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{009a}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{009b}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{009c}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{009d}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{009e}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
    "\x{009f}" does not map to cp850 at E:\13.Perl\2.Langage\4.Charset\Test_02.pl line 22.
     9 :  \x{0090}   \x{0091}   \x{0092}   \x{0093}   \x{0094}   \x{0095}   \x{0096}   \x{0097}   \x{0098}   \x{0099}   \x{009a}   \x{009b}   \x{009c}   \x{009d}   \x{009e}   \x{009f}
     
    10 :  *   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   *   ®   ¯
    11 :  °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿
    12 :  À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï
    13 :  Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß
    14 :  à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï
    15 :  ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ
     
     
    é àèù âêîôû äëïöü ç
    Appuyez sur une touche pour continuer...
    Les caractères sont tous lisibles, mais je n'ai plus accès aux caractères allant de 0x80 jusqu'à 0x9F.
    Et comme on peut le constater, je suis toujours en cp850 pour la console.

    Maintenant, je force la console en windows-1252, et mon script est encodé aussi en Windows-1252, comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use 5.24.1;
     
    system("chcp 1252 > nul");
     
    my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ ); 
    foreach my $h ( \*STDOUT, \*STDERR, \*STDIN ) { binmode $h, ":encoding(cp$codepage)"; }
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    system("pause");
    exit;
    Et voici le résultat que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
    "\x{0080}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0081}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0082}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0083}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0084}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0085}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0086}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0087}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0088}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0089}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{008a}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{008b}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{008c}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{008d}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{008e}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{008f}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
     8 :  \x{0080}   \x{0081}   \x{0082}   \x{0083}   \x{0084}   \x{0085}   \x{0086}   \x{0087}   \x{0088}   \x{0089}   \x{008a}   \x{008b}   \x{008c}   \x{008d}   \x{008e}   \x{008f}
     
    "\x{0090}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0091}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0092}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0093}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0094}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0095}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0096}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0097}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0098}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{0099}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{009a}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{009b}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{009c}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{009d}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{009e}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
    "\x{009f}" does not map to cp1252 at E:\13.Perl\2.Langage\4.Charset\Test_03.pl line 23.
     9 :  \x{0090}   \x{0091}   \x{0092}   \x{0093}   \x{0094}   \x{0095}   \x{0096}   \x{0097}   \x{0098}   \x{0099}   \x{009a}   \x{009b}   \x{009c}   \x{009d}   \x{009e}   \x{009f}
     
    10 :  *   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   *   ®   ¯
    11 :  °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿
    12 :  À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï
    13 :  Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß
    14 :  à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï
    15 :  ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ
     
     
    é àèù âêîôû äëïöüÿ ç
     
    Appuyez sur une touche pour continuer...
    Dans ce cas-ci, je ne comprends pas pourquoi je ne peux pas accéder aux caractères allant de 0x80 jusqu'à 0x9F.
    Tout ce passe comme si le CP850 était perturbateur.

    Le seul cas qui fonctionne correctement, c'est forcer la console en CP1252, encoder le script en CP1252, et de n'utiliser que "system("chcp 1252 > nul");"
    Voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use 5.24.1;
     
    system("chcp 1252 > nul");
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    system("pause");
    exit;
    Et voici le résultat à l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
     8 :  €      ‚   ƒ   „   …   †   ‡   ˆ   ‰   Š   ‹   Œ      Ž   
     9 :     ‘   ’   “   ”   •   –   —   ˜   ™   š   ›   œ      ž   Ÿ
    10 :  *   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   *   ®   ¯
    11 :  °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿
    12 :  À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï
    13 :  Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß
    14 :  à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï
    15 :  ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ
     
     
    é àèù âêîôû äëïöüÿ ç
    Appuyez sur une touche pour continuer...
    Cette fois-ci l'affichage est exactement ce que je veux.

    Donc ce n'est pas seulement une question concernant l'affichage des accents mais aussi de l'accessibilité à la totalité du charset.
    Or votre solution ne concerne que les accents, et ne peut donc pas me convenir totalement.

    Ce que je recherche, comme le titre de ce sujet l'indique, c'est depuis perl, forcer le charset en windows-1252 ou CP1252 ou encore ANSI.
    Il est fort probable que cela ne se fasse pas directement dans le script Perl mais ailleurs.

    Y-a-t-il un paramétrage à faire pour indiquer que la console qui va être utilisé sous Perl, doit être configuré de telle ou telle façon ?

    Merci !
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour et MERCI d'avoir détaillé la situation, il me fallait au moins çà

    Il semble que de modifier le charset dans le programme Perl, ET donc dans une invite de commande déjà ouverte, ne permette pas d'avoir accès à l'ensemble des caractères désirés, (A vérifier).

    Après moult essais j'en suis arrivé au même point que toi :
    Citation Envoyé par Artemus24
    Il est fort probable que cela ne se fasse pas directement dans le script Perl mais ailleurs.
    PS : je commente #use 5.24.1; car je suis qu'en (v5.24.0).
    PS : j'ai fait plusieurs essais d'encodage avec les éditeurs UltraEdit et Notepad++, je n'ai conservé ici que ceux fait avec UE.

    Voici les deux qui semblent convenir :
    1) Sauvegarder le pgm.pl en ANSI/ASCII (ou équivalent)
    NB : pas besoin de pragma spécifique comme use utf8;

    ANSI_UE.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    #use 5.24.1;
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    #system("pause");
    exit;


    2) Sauvegarder le pgm.pl en UTF8 NO-BOM
    NB : le pragma use utf8; est indispensable
    Ayant eu à m'arracher les cheveux en manipulant des chaînes arabes, c'est la solution que j'ai adopté :
    utf8 partout, partout : codes source & fichiers.

    UTF8_UE.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use utf8;
    #use 5.24.1;
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    #system("pause");
    exit;
    NB : Pas de modif du charset dans les 2 pgm.pl

    Il faut donc le faire avant !

    Deux liens qui m'ont mis sur la piste du registre : UN ; DEUX

    La modification de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
    "OEMCP"="437"
    en 1252 n'a rien donnée chez moi, même après réinitialisation de la session.

    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Windows Registry Editor Version 5.00
    ; Auto–code-page.reg
    ; Have chcp automatically run whenever a command-prompt is opened
    ;
     
    ;For current user
    [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
    "Autorun"="chcp 1252"
     
    ;For all users
    ;[HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor]
    ;"Autorun"="chcp 1252"
    Qui ne modifie ici que le current user, fonctionne parfaitement.
    Par contre je n'arrive pas à l'invalider Autorun en lançant, comme le laisse penser la doc :

    /D Ignore registry AutoRun commands
    HKLM | HKCU \Software\Microsoft\Command Processor\AutoRun
    Attention, je suis en W7, je ne sais pas si la directive en tête du fichier.reg est correcte, ni si les clés correspondent en W10, mais il doit y avoir la correspondance...


    L'utilisateur récupère bécif une invite de commande en charset cp1252 ce qui peut impliquer dans les autres pgm.pl d'y coller le pragma use utf8;

    [Edit 07:47] avec un .bat
    Bien sûr en cas d'incompatibilité avec d'autres programmes ou dans l'impossibilité de modifier le registre il y a toujours la possibilité d'encapsuler le programme Perl dans un .bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chcp 1252
    perl ANSI_UE.pl
    pause
    chcp 437
    Ça donne :

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Mille mercis de vous être intéressé à mon problème. Ca mérite des '+'1 !

    Vous vous demandez certainement pourquoi je désire forcer la console à windows-1252 ? C'est à cause du caractère qui est le '€' codé 0x80 !
    Et la solution que je cherchais, c'était de ne faire aucune translation !

    Grace à vous, j'ai trouvé la solution qui me convient parfaitement et bien sûr, elle ne se limite pas au charset windows-1252, mais peut-être aussi utilisé avec l'UTF-8.

    En suivant vos recommandations, j'ai cherché sur le net, si votre astuce fonctionnait pour Windows 10 Pro.
    Et j'ai trouvé ce lien que voici : change-default-code-page-of-windows-console-to-utf-8
    Il y a sûrement d'autres liens, mais je me suis arrêté à celui-ci, qui me convient. Dans l'avant dernière solution proposée, je trouve enfin mon bonheur, que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Windows Registry Editor Version 5.00
    [HKEY_CURRENT_USER\Console]
    "CodePage"=dword:fde9
    Autrement dit, quand j'utilise la console windows pour le langage perl, il y a une clef qui est créé dans la base des registres.
    Cette clef est : "[HKEY_CURRENT_USER\Console\C:_Perl64_bin_perl.exe]" !
    Il y a déjà un paramétrage existant, mais je ne voie rien en ce qui concerne le "code page" initialisé à "850".Dans l'exemple donné ici, "0xFDE9" correspond en décimal à "65001", c'est-à-dire l'UTF-8.
    L'astuce indique de créer une nouvelle valeur de nom "CodePage" (attention aux majuscules), de type DWORD (32 bits) dont j'ai rentré en décimal la valeur "1252".
    Je fais le test et cela fonctionne parfaitement !

    J'en profite aussi pour modifier la console windows : [HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe] en mettant "CodePage" à 1252 (en décimal).
    Et le test donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Microsoft Windows [version 10.0.14393]
    (c) 2016 Microsoft Corporation. Tous droits réservés.
     
    C:\>chcp
    Page de codes active*: 1252
     
    C:\>
    Autres questions concernant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    binmode (STDIN,  "encoding(:cp850)");
    binmode (STDERR, "encoding(:cp850)");
    binmode (STDOUT, "encoding(:cp850)");
    Quand on précise "cp850" est-ce que cela signifie que l'on désire codifier l'affichage dans le charset cp850 ?

    Je constate qu'après la modification du charset de la console perl, si je laisse dans le script "binmode (STDOUT, "encoding(:cp850)");", je ne peux pas obtenir à l'affichage le caractère "€" (0x80):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "\x{0080}" does not map to cp1252 at E:\13.Perl\02.Langage\4.Charset\Test_03.pl line 27.
    \x{0080}
    Pouvez-vous m'expliquer l'usage de ces trois encodages ?
    Vu que je suis dans la console perl, avec le charset "windows-1252", est-ce vraiment utile de les utiliser ?
    Sinon, dans quel cas aurai-je besoin de faire une translation (encodage) ?

    Comment utiliser de l'UTF-8 quand la console est en Windows-1252 ?
    A vrai dire, je pense que la translation se fait que sur les équivalents des caractères disponibles dans le charset windows-1252.
    Donc on peut définir comme encodage du UTF-8 dans le script, mais il faut au préalable mettre la console en "65001", à l'instar de ce que j'ai fait avec "1252".

    Et pour terminer, existe-t-il un équivalent à "system("pause");" dans perl ?

    Merci beaucoup !
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour Artemus24,
    Ravi que vous ayez trouvé une solution qui vous convienne (puisque vous préférez le vouvoiement et que je privilégie l'équilibre ).
    Je vais remplacer "Retraité" par "Écolier" ça impressionnera moins, et ça ne sera pas complètement faux vu que, c'est bien connu, en vieillissant on retombe dans l'enfance

    Trêve de plaisanterie, Merci à vous pour :
    - les détails et les liens que vous avez fournis et qui serviront sans nul doute
    - de m'avoir permis d'approfondir un peu plus le sujet
    Même s'il reste encore pour moi de sacrés zones d'ombre.

    En effet, je n'ai jamais pris le temps de vérifier le comportement de la commande chcp lancée depuis Perl, donc dans une invite de commande déjà ouverte, et sur la totalité des caractères.
    Comme vous :
    Citation Envoyé par Artemus24
    Je constate qu'après la modification du charset de la console perl, si je laisse dans le script "binmode (STDOUT, "encoding(:cp850)");", je ne peux pas obtenir à l'affichage le caractère "€" (0x80):
    Et pas seulement sur ce caractère.
    Pour cette raison j'avais précisé :
    Citation Envoyé par dmganges
    Il semble que de modifier le charset dans le programme Perl, ET donc dans une invite de commande déjà ouverte, ne permette pas d'avoir accès à l'ensemble des caractères désirés, (A vérifier).
    Je suis incapable d'expliquer ce fonctionnement curieux !

    Citation Envoyé par Artemus24
    Autres questions concernant ceci :
    binmode (STDIN, "encoding(:cp850)");
    binmode (STDERR, "encoding(:cp850)");
    binmode (STDOUT, "encoding(:cp850)");

    Quand on précise "cp850" est-ce que cela signifie que l'on désire codifier l'affichage dans le charset cp850 ?
    OUI !
    Autre façon de l'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    binmode \*STDOUT, ":encoding(cp850)";
    Ou comme dans la fonction ActiverAccentsDOS() de djibril :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    Initialement la préoccupation était l'affichage des caractères accentués...

    Pouvez-vous m'expliquer l'usage de ces trois encodages ?
    Là je risque d'être acide

    Voici un peu de littérature sur le sujet cp437 cp830 Unicode
    Il ne faut pas perdre de vue que l'informatique a été créée par des occidentaux pour des occidentaux,
    plus précisément par des anglo-saxons pour des anglo-saxons,
    plus précisément encore par des américains pour des américains.

    Les premiers arrivés se sont occupés de leurs soucis qui n'étaient pas les caractères accentués latins, et encore moins les caractères dans les langues extrême-orientales ni ceux des langues sémitiques...
    Mais lorsqu'il est devenu intéressant, disons faire du fric avec l'informatique, il a fallu contenter les éventuels acheteurs...
    Tout en conservant ce qui avait été fait, au nom de la sacrée compatibilité ascendante ...
    Nous héritons donc d'un mille-feuilles de codifications qui se complètes, s'entrecroisent, se superposent...
    Çà c'est pour les codifications !

    Mais ce n'est pas fini, s'ajoute l'affichage !
    Il a fallu mettre à disposition des programmes qui affichent ces caractères :
    - programmes rudimentaires pour le latin sans accent
    - programmes un peu plus sophistiqués lorsqu'il y a des caractères accentués, voyez la manip à deux touches pour obtenir âïô...
    - des usines à gaz pour afficher de l'arabe ou du tai, essayez de faire ne serait-ce qu'un copier/coller d'une chaîne arabe dans un éditeur ou un traitement de texte...
    Ne parlons pas du charset arabe cp1256 dans une invite de commande...

    Et pour cause les invites de commande DOS, Windows, Unix, Linux... les terminaux virtuels...
    n'ont été pensés que pour lancer des applications, au mieux afficher quelques messages d'erreur ou résultats sommaires.
    La nécessité de les faire évoluer ne s'est pas présentée...

    Donc pour répondre un peu à la question, les codifications cp437 cp830 cp1252 windows-1252 qui sont des codifications propriétaires IBM, Microsoft...
    concernent essentiellement les "invites de commandes", autrement dit l'entrée standard STDIN et les deux sorties standard STDOUT et STDERR qui ne sont rien d'autre que des fichiers {("spéciaux")}
    avec beaucoup de (})[(... car le mot désigne bien d'autres choses...
    Pour le stockage de l'information on utilisera unicode qui englobe TOUT ou une norme ISO spécifique iso-8859-16...
    Bon j'arrête sinon je fais un bouquin

    Vu que je suis dans la console perl, avec le charset "windows-1252", est-ce vraiment utile de les utiliser ?
    Sinon, dans quel cas aurai-je besoin de faire une translation (encodage) ?
    A priori non !
    Mais il n'est pas dit que tous vos programmes fonctionnent en windows-1252, que pour exécuter des programmes anciens vous ne soyez pas obligé de régresser en cp830 voire cp437...
    Il s'agira de ménager la chèvre et le choux de trouver la combinaison qui va bien

    Comment utiliser de l'UTF-8 quand la console est en Windows-1252 ?
    Les invites de commandes n'ont pas été prévues pour afficher l'UTF-8 (voir ci-dessus).
    Elles sont TOUTES incapables d'afficher la totalités des caractères unicode !
    Au mieux le programme précisera que les écritures seront faites en utf8 :
    la console n'affichera que ce qu'elle pourra afficher !
    Il sera préférable d'écrire dans un fichier en utf8 ou dans un iso approprié, puis de visualiser le fichiers dans un éditeur de texte, un traitement de texte...
    de générer du html, xml... puis de l'afficher dans un navigateur...

    A vrai dire, je pense que la translation se fait que sur les équivalents des caractères disponibles dans le charset windows-1252.
    Donc on peut définir comme encodage du UTF-8 dans le script, mais il faut au préalable mettre la console en "65001", à l'instar de ce que j'ai fait avec "1252".
    C'est exactement çà !

    Et pour terminer, existe-t-il un équivalent à "system("pause");" dans perl ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    print "Taper sur une touche pour continuer\n";
    chomp(my $saisie = <STDIN>);
     
    #Et on ne s'occupe pas de ce qu'on à dans $Saisie
     
    #NB chomp ne fait que supprimer le retour à la ligne qui suit le ou les caractères
    #Donc ici on peut écrire :
     
    my $saisie = <STDIN>;
    Bonne continuation et bonne journée !
    05h00 c'est l'heure du deuxième petit déjeuner de papé

    [Edit 05:55] Ah, ça va mieux !

    En fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "Taper sur <Entrée> pour continuer\n";
    my $saisie = <STDIN>;
    PS : le forum est déjà à l'heure d'été et je suis encore à l'heure du soleil, la vraie
    PS : le forum ne comptabilise plus les affichages

  9. #9
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Citation Envoyé par dmganges
    Même s'il reste encore pour moi de sacrés zones d'ombre.
    Je suis exactement dans le même cas que vous-même !

    Citation Envoyé par dmganges
    En effet, je n'ai jamais pris le temps de vérifier le comportement de la commande chcp lancée depuis Perl, donc dans une invite de commande déjà ouverte, et sur la totalité des caractères.
    Jusqu'à présent, quand j'utilisais la console, c'était pour faire un script batch windows, et j'avais le réflexe de toujours mettre "chcp 1252 > nul" afin de forcer le charset à "windows-1252".
    C'était largement suffisant pour ce que je faisais. Il y a déjà quatre ans de cela, je m'étais intéressé à la gestion des caractères exotiques (autre qu'occidental) et j'ai encontré beaucoup de problèmes.
    Or il faut faire la distinction entre le charset et la police de caractères. L'un (le charset) correspond à la codification et l'autre (la police) à ce qui va s'afficher à la console.
    Je me suis intéressé au chinois et au japonais. Plusieurs constatations :
    --> ce que propose Microsoft pour la console, est assez pauvre et ne permet pas de gérer correctement, à l'état natif, du chinois, de l'arabe ...
    --> qu'il faut trouver et installer une police complète. J'ai recherché une version gratuite, sans succès, alors que pour certaines, c'est payant.
    --> que je n'ai sûrement pas tout compris de comment il fallait procéder pour gérer et afficher ces caractères dans la console. Et du coup, j'ai laissé tombé.

    Citation Envoyé par dmganges
    Je suis incapable d'expliquer ce fonctionnement curieux !
    J'ai un peu avancé dans la recherche du bon comportement pour le charset "windows-1252" à la console et dans le script.
    La console perl est maintenant codifié par défaut en "windows-1252".
    Et voici le script encodé en "ANSI" (windows-1252) qui permet de gérer correctement tous les caractères !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use 5.24.1;
     
    binmode (STDIN,  "encoding(:latin1)");
    binmode (STDERR, "encoding(:latin1)");
    binmode (STDOUT, "encoding(:latin1)");
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöü ç €\n";
     
    system("pause");
    exit;
    Et voici le résultat que j'obtiens chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
     8 :  €      ‚   ƒ   „   …   †   ‡   ˆ   ‰   Š   ‹   Œ      Ž   
     9 :     ‘   ’   “   ”   •   –   —   ˜   ™   š   ›   œ      ž   Ÿ
    10 :  *   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   *   ®   ¯
    11 :  °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿
    12 :  À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï
    13 :  Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß
    14 :  à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï
    15 :  ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ
     
     
    é àèù âêîôû äëïöü ç €
    Appuyez sur une touche pour continuer...
    Et comme on peut le constater, l'affiche est correcte et conforme au charset "windows-1252".
    L'erreur a été de mettre "cp1252" au lieu de latin1, comme j'ai pu le constater à plusieurs reprises dans les didacticiels sur le net.
    C'est en faisant une recherche sur le net que j'ai trouvé cette information qui me semble donc être ce qu'il faut faire !

    Citation Envoyé par dmganges
    Citation Envoyé par Artemus24
    Quand on précise "cp850" est-ce que cela signifie que l'on désire codifier l'affichage dans le charset cp850 ?
    OUI !
    Si cela concerne l'affichage (STDOUT), cela me convient parfaitement.
    J'en déduis alors que Perl n'est pas capable de connaitre le charset utilisé par la console.

    Mais quand est-il de l'encodage du script, c'est-à-dire la façon dont "notepadd++" va gérer le codage du fichier suffixé par ".pl" ?

    Citation Envoyé par dmganges
    Initialement la préoccupation était l'affichage des caractères accentués...
    C'est pourquoi, les exemples données dans le forum développez ou sur le net ne me convenaient pas du tout.
    Car la console était codifié avec le "Code Page" en "850" (ou parfois en 437), le script encodé en "utf-8" ou en ANSI et l'on désirait seulement afficher les caractères Diacritiques.
    Cela fonctionnait pour l'affichage de ces caractères mais pas pour les autres.

    Car si par exemple, le caractère existait sous le charset "cp850", cela se passait bien, mais dans le cas contraire, il y avait une erreur.
    Autrement dit, on faisant des translations d'un charset dans un autre qui n'avaient pas lieu d'être.

    Citation Envoyé par dmganges
    Çà c'est pour les codifications !
    Je connais un peu le problème, entre l'EBCDIC et l'ASCII qui étaient les seuls codifications fonctionnelles sur les ordinateurs (gros système).
    Puis ensuite, on a exploité la codification l'ASCII (<=127) en utilisant les codes allant de 128 à 255.
    C'est ce que l'on nomme les extensions à l'ASCII sur 8 bits, où chaque pays occidental voulait sa codification.
    L'inconvénient était la multiplicité de ces codifications, qui sont limités à 127 caractères supplémentaires.

    Puis ensuite, la norme c'est intéressé à ce problème en essayant de mettre de l'ordre dans tout ça.
    A part l'UTF-8, et encore, pour le reste je suis largué !

    Citation Envoyé par dmganges
    Mais ce n'est pas fini, s'ajoute l'affichage !
    Ce que l'on nomme la police de caractères.

    Citation Envoyé par dmganges
    Pour le stockage de l'information on utilisera unicode qui englobe TOUT ou une norme ISO spécifique iso-8859-16...
    J'utilise que deux types de codifications :
    --> windows-1252 qui porte aussi le nom de ANSI ou latin1.
    Mais vu que j'utilise essentiellement les caractères Diacritiques et le symbole '€', j'utilise aussi "ISO-8859-15".
    C'est pour le stockage dans les bases de données, à la console et dans les programmes comme le 'C' et le 'C++' et maintenant aussi le perl.
    --> utf-8 pour tout ce qui ne vient pas de chez moi.

    Citation Envoyé par dmganges
    A priori non !
    Donc aucune translation n'est nécessaire si le script et la console sont encodés dans le même charset.
    Mais ne fait-il pas quand même le préciser quelque part ?

    Citation Envoyé par dmganges
    Les invites de commandes n'ont pas été prévues pour afficher l'UTF-8 (voir ci-dessus).
    Et c'est pourquoi, Microsoft à créé la "CodePage" 65001 pour l'utf-8.

    Citation Envoyé par dmganges
    Elles sont TOUTES incapables d'afficher la totalités des caractères unicode !
    D'où le problème que j'ai rencontré en voulait faire mumuse avec le chinois et le japonais.

    P.S.: vous êtes de quel coin du monde ? Un pays arabe je suppose ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  10. #10
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Merci pour ces infos supplémentaires !

    Citation Envoyé par Artemus24
    Donc aucune translation n'est nécessaire si le script et la console sont encodés dans le même charset.
    Mais ne fait-il pas quand même le préciser quelque part ?
    En ce qui me concerne, pour faire simple :

    1 - Je ne m'occupe JAMAIS du charset de la console, je conserve TOUJOURS celui délivré par défaut cp457
    TOUS mes programmes.pl sont enregistrés utf8 NO-BOM


    2 - Si je ne manipule pas de chaînes arabes, je n'utilise pas le pragma use utf8;
    Si j'écris dans un fichier, je le fais TOUJOURS en utf8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open $fh_Sortie, '>:utf8', $Out_Fic
    open $fh_Entree, '<:utf8', $In_Fic
    J'utilise TOUJOURS la fonction ActiverAccentsDOS() de djibril
    Éventuellement j'encode en iso-8859-16
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Msg = encode("iso-8859-16", $Msg);
    pour être compatible avec d'autres logiciels, par exemple codification de l'objet d'un mail avec use Mail::IMAPClient;


    NB : A vrai dire je n'utilise la fonction ActiverAccentsDOS() seulement parce quand j'étais petit je prenais des coups de règles sur les doigts si je ne mettais pas les accents...

    Effectivement il serait possible de ne pas utiliser la fonction ActiverAccentsDOS() en plaçant la console en cp1252 :
    ANSI_UE.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    use strict;
    use warnings;
    use diagnostics;
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç €\n";
     
    exit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    E:\_DEV\Developpez\Artemus>chcp 1252
    Page de codes active*: 1252
     
    E:\_DEV\Developpez\Artemus>perl ANSI_UE.pl
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
     8 :  €      ‚   ƒ   „   …   †   ‡   ˆ   ‰   Š   ‹   Œ      Ž   
     9 :     ‘   ’   “   ”   •   –   —   ˜   ™   š   ›   œ      ž   Ÿ
    10 :  *   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   *   ®   ¯
    11 :  °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿
    12 :  À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï
    13 :  Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß
    14 :  à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï
    15 :  ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ
     
     
    é àèù âêîôû äëïöüÿ ç €
     
    E:\_DEV\Developpez\Artemus>

    3 - Si je manipule des chaînes arabes, j'utilise le pragma use utf8;
    J'utilise TOUJOURS la fonction ActiverAccentsDOS() de djibril pour avoir qq info rudimentaires sur le déroulement du pgm (les accents c'est juste pour éviter les coups de règles)
    Le reste je l'écris dans des fichiers, TOUJOURS en utf8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open $fh_Sortie, '>:utf8', $Out_Fic
    open $fh_Entree, '<:utf8', $In_Fic
    Éventuellement j'encode en iso-8859-16 les libellés en français


    Effectivement console en cp1252 et pragma utf8;
    ça n'aime pas le caractère € A LA CONSOLE, seulement ce caractère et seulement à la console, et donc Éventuellement cela m'importerait peu...

    Éventuellement car je conserve TOUJOURS la console en cp457 et que j'utilise TOUJOURS la fonction ActiverAccentsDOS()

    UTF8_UE.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    use strict;
    use warnings;
    use diagnostics;
    use utf8;
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç €\n";
     
    exit;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    E:\_DEV\Developpez\Artemus>perl UTF8_UE.pl
     2 :      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
     3 :  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
     4 :  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
     5 :  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
     6 :  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
     7 :  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
     8 :  €      ‚   ƒ   „   …   †   ‡   ˆ   ‰   Š   ‹   Œ      Ž   
     9 :     ‘   ’   “   ”   •   –   —   ˜   ™   š   ›   œ      ž   Ÿ
    10 :  *   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   *   ®   ¯
    11 :  °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿
    12 :  À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï
    13 :  Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß
    14 :  à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï
    15 :  ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ
    Wide character in print at UTF8_UE.pl line 19 (#1)
        (S utf8) Perl met a wide character (>255) when it wasn't expecting
        one.  This warning is by default on for I/O (like print).  The easiest
        way to quiet this warning is simply to add the :utf8 layer to the
        output, e.g. binmode STDOUT, ':utf8'.  Another way to turn off the
        warning is to add no warnings 'utf8'; but that is often closer to
        cheating.  In general, you are supposed to explicitly mark the
        filehandle with an encoding, see open and "binmode" in perlfunc.
     
     
     
    é Ã*èù âêîôû äëïöüÿ ç €
     
    E:\_DEV\Developpez\Artemus>

    Bref :
    - je conserve cp457 pour ménager la chèvre et le choux.
    - je code tous les fichiers en utf8
    j'arrive à faire ce que je souhaite, et étant le seul utilisateur de mes élucubrations ludiques, je ne suis pas trop sévère avec moi-même

    Citation Envoyé par Artemus24
    P.S.: vous êtes de quel coin du monde ? Un pays arabe je suppose ?
    Perdu
    Tout est dans le pseudo les initiales de dufour michel et ganges le dème (la commune 34190) dans l'Hérault
    L'avatar n'est rien d'autre que 'michel' dans l'une des nombreuses calligraphies arabes.
    Je suis méditerranéen, donc pétri de culture égyptienne, perse, sumérienne, grecque, romaine, turque... et bien sûr arabe !

    @+
    Voici à quoi je m'amuse, entre autre... (mais je ne peux pas coller le son) :

  11. #11
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Citation Envoyé par dmganges
    j'arrive à faire ce que je souhaite, et étant le seul utilisateur de mes élucubrations ludiques, je ne suis pas trop sévère avec moi-même
    Tant mieux si vous n'êtes pas trop exigeant avec vous-même ! Mais les charset sous windows, c'est le bordel.

    Citation Envoyé par dmganges
    Citation Envoyé par Artemus24
    P.S.: vous êtes de quel coin du monde ? Un pays arabe je suppose ?
    Perdu
    Tout est dans le pseudo les initiales de dufour michel et ganges le dème (la commune 34190) dans l'Hérault
    Vous m'avez induit en erreur quand vous disiez : "[]cPS : le forum est déjà à l'heure d'été et je suis encore à l'heure du soleil, la vraie [/c]".
    Vu qu'en ce moment, en France, il faut mauvais temps, je me suis dit que le vrai soleil se trouvait là où il faut beau toute l'année, autrement dit le maghreb.
    Je suis de la Dordogne, et j'habite à Montignac. Vous ne connaissez sûrement pas. Mais si je dis les grottes de Lascaux, je pense que cela doit vous parlez un peu mieux.

    Je n'arrive pas à gérer correctement l'utf-8 avec le même procédé. Voici le script encodé en utf-8 (sans bom).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!C:\perl64\bin\perl.exe -w
     
    use strict;
    use warnings;
    use diagnostics;
    use utf8;
    use 5.24.1;
     
    system("chcp 65001 > nul");
     
    binmode(STDIN,  ":utf8");
    binmode(STDERR, ":utf8");
    binmode(STDOUT, ":utf8");
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..7,16..20) {
    	printf("%3d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j)."   ";
    	}
    	print "\n";
    }
     
    print "é àèù âêîôû äëïöüÿ ç\n";
     
    print "Taper sur <Entrée> pour continuer\n";
    my $saisie = <STDIN>;
    exit;
    Et voici le résultat. J'ai préféré cette fois-ci mettre une image de ce que j'obtiens.



    Le problème est que trois des caractères en fin de ligne sont dupliqués sur la ligne suivante.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  12. #12
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour !

    je suis encore à l'heure du soleil, la vraie
    C'était pour dire que je suis d'un autre temps et aussi que je me suis intéressé à l'astronomie développée par les savants arabes... l'astrolabe qui donne l'heure vraie de jour comme de nuit...
    Et je connais un peu la Dordogne

    Lorsqu'on met le pragma use utf8; il ne faut pas modifier le charset dans le programme, il faut l'avoir fait avant :

    UTF8_UE.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    use strict;
    use warnings;
    use diagnostics;
    use utf8;
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    exit;
    NB : j'ai supprimé le € du print, car il fout le binz voir image précédente.

  13. #13
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    A moins d'afficher le € avec chr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "\n". chr(128) ."\n";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    use strict;
    use warnings;
    use diagnostics;
    use utf8;
     
    #ActiverAccentsDOS();
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    print "\n". chr(128) ."\n";
     
    exit;
     
    #==============================================================
    # Pour avoir les accents sur la console DOS
    # http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
    #==============================================================
    sub ActiverAccentsDOS {
    	my $encodage;
    	# Windows
      	if ( lc($^O ) eq 'mswin32') {
    		eval {
    			my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
    			$encodage = "cp$codepage";
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
    	else {
    		$encodage = `locale charmap`;
    		eval {
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
      return $encodage;
    }
     
    #Sinon :
    #ü 	\x81 	à 	\x85 	è 	\x8A
    #é 	\x82 	ç 	\x87 	ï 	\x8B
    #â 	\x83 	ê 	\x88 	î 	\x8C
    #ä 	\x84 	ë 	\x89
    Mais c'est vrai que c'est le bordel !

    [Edit 05:45] ça y est, ça va mieux

    je ne suis pas trop sévère avec moi-même
    J'aurais dû écrire :
    Je ne suis pas trop sévère avec moi-même pour ce qui ne dépend pas de moi, dans la plus pure tradition Stoïcienne !
    Sinon j'aurais tendance à être exigeant au point d'en être chiant !

    Là je fais avec ce que Microsoft me donne, et qui ne semble pas perturber grand monde !

    Un peu comme quand Bill Gates fête son premier millier de milliard de dollars, alors que a moitié de la population afghane n'a pas un € par jour pour vivre...
    Il n'y a que les imbéciles et les autruches pour s'étonner qu'il y ait du terrorisme !

    Mais il faut que j'arrête là, sinon je vais encore remplir des pages

  14. #14
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Citation Envoyé par dmganges
    Lorsqu'on met le pragma use utf8; il ne faut pas modifier le charset dans le programme, il faut l'avoir fait avant :
    Que je le fasse dans le script perl ou que je le fasse dans le batch windows qui va appelé le script perl, j'obtiens le même résultat.
    Les trois exemples que vous me donnez ne sont pas en UTF-8. le premier, c'est le CodePage 437, le deuxième du 1252 et le troisième encore du 1252.

    De plus, l'UTF-8 n'affiche aucun caractère allant de 0x80 à 0xFF. Ce sont les caractères au delà de 0x0100.
    Mais j'ai quand même un doute sur le choix des caractères affichés dans mon exemple.

    Mais vu que c'est de l'unicode (ou du wide character), je me demande si la fonction perl "chr()" est bien adapté à l'utf-8.

    Citation Envoyé par dmganges
    A moins d'afficher le € avec chr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "\n". chr(128) ."\n";
    Le "chr(128) produit bien le caractère '€' à la condition que le CodePage que vous utilisez soit bien en '1252'.
    Mon problème, c'est d'obtenir le bon CodePage et non d'afficher le caractère '€'.
    En ce qui concerne le CodePage '1252', mon problème est résolu car cela fonctionne correctement.

    Mais en ce qui concerne l'UTF-8, et en appliquant la même méthode que pour le CdePage '1252', je n'obtiens pas un affichage correcte.
    Et pourtant, le CodePage que j'utilise est '65001' et mon script est encodé en "utf-8 (sans bom)" sous "Notepad++".

    A moins que le problème soit dans le choix de la police de caractères utilisé sous la console Perl.
    J'utilise "Déjà vu sans mono" (sous console, propriété puis dans police).

    Pourvez-vous expliqué pourquoi on trouve parfois "utf8" et "utf-8", c'est-à-dire sans et avec un tiret ?

    Citation Envoyé par dmganges
    C'était pour dire que je suis d'un autre temps et aussi que je me suis intéressé à l'astronomie développée par les savants arabes...
    Je me suis intéressé, jadis, à l'alchimie, la spagyrie, l'astrologie.
    Je m'intéresse encore à tout ce qui est ésotérique, mystérieux, et j'aime bien regarder des reportages sur des civilisations anciennement, les ovnis, le paranormal ...

    De ce coté là, je suis aussi d'un autre temps, mais pas tant que cela, car j'aime aussi la science fiction, le fantastique, les nouvelles technologies ...
    En fait, je ne voie pas trop de différences, sinon dans la façon de raisonner !

    Pour l'affichage de votre texte en écriture arabe, vous utilisez un logiciel particulier ou vous le faites avec la console windows ?

    Citation Envoyé par dmganges
    l'astrolabe qui donne l'heure vraie de jour comme de nuit...
    Et pourquoi pas un gnomon ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  15. #15
    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 : 498 771
    Points
    498 771

  16. #16
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut djibril .

    Merci pour le lien, mais je l'ai déjà lu et je ne suis pas arrivé à gérer correctement l'utf-8.
    Il y a sûrement quelque chose que je fais mal, mais je ne voie pas quoi.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  17. #17
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Citation Envoyé par Artemus24
    Le "chr(128) produit bien le caractère '€' à la condition que le CodePage que vous utilisez soit bien en '1252'.
    Mon problème, c'est d'obtenir le bon CodePage et non d'afficher le caractère '€'.
    En ce qui concerne le CodePage '1252', mon problème est résolu car cela fonctionne correctement.

    Mais en ce qui concerne l'UTF-8, et en appliquant la même méthode que pour le CdePage '1252', je n'obtiens pas un affichage correcte.
    Et pourtant, le CodePage que j'utilise est '65001' et mon script est encodé en "utf-8 (sans bom)" sous "Notepad++".

    A moins que le problème soit dans le choix de la police de caractères utilisé sous la console Perl.
    J'utilise "Déjà vu sans mono" (sous console, propriété puis dans police).
    De mon côté le seul résultat correct à l'affichage est :
    - CodePage 1252 forcé avant le lancement du pgm.pl
    - pgm.pl encodé en "utf-8 (sans bom)"
    - pas de modification du CodePage à l'intérieur du pgm.pl

    Les autres combinaisons, je n'arriverai plus à toutes les lister... n'ont rien donné de correct.
    Entre autre, avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    system("chcp 65001 > nul");
    binmode(STDIN,  ":utf8");
    binmode(STDERR, ":utf8");
    binmode(STDOUT, ":utf8");
    A l'issue, je ne peux plus repasser la console en cp457 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    use strict;
    use warnings;
    use diagnostics;
    use utf8;
    #use open OUT => ':utf8';
    #use open ':std';
     
    system("chcp 65001 > nul");
     
    binmode(STDIN,  ":utf8");
    binmode(STDERR, ":utf8");
    binmode(STDOUT, ":utf8");
     
    #ActiverAccentsDOS();
     
    # ------------------------
    # Affichage des caractères
    # ------------------------
     
    foreach my $i (2..15) {
    	printf("%2d :  ",$i);
     
    	foreach my $j (0..15) {
    		print chr($i*16+$j).'   ';
    	}
    	print "\n";
    }
     
    print "\n\né àèù âêîôû äëïöüÿ ç\n";
     
    print "\n". chr(128) ."\n";
     
     
    exit;
     
    #==============================================================
    # Pour avoir les accents sur la console DOS
    # http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
    #==============================================================
    sub ActiverAccentsDOS {
    	my $encodage;
    	# Windows
      	if ( lc($^O ) eq 'mswin32') {
    		eval {
    			my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
    			$encodage = "cp$codepage";
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
    	else {
    		$encodage = `locale charmap`;
    		eval {
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
      return $encodage;
    }
     
    #Sinon :
    #ü 	\x81 	à 	\x85 	è 	\x8A
    #é 	\x82 	ç 	\x87 	ï 	\x8B
    #â 	\x83 	ê 	\x88 	î 	\x8C
    #ä 	\x84 	ë 	\x89
    Citation Envoyé par Artemus24
    A moins que le problème soit dans le choix de la police de caractères utilisé sous la console Perl.
    Effectivement, maintenant qui j'y pense, perso j'ai dû passer en TT Consolas pour avoir le €

    Mes 2 seules autres possibles étant TT lucida Console & Polices Raster (je n'en ai pas installé d'autre...).


    Citation Envoyé par Artemus24
    Pourvez-vous expliqué pourquoi on trouve parfois "utf8" et "utf-8", c'est-à-dire sans et avec un tiret ?
    L'expliquer non !
    Je me suis aussi posé la question. Pour me faciliter la vie j'en ai déduit qu'il s'agissait de la même chose... des synonymes...
    J'ai utilisé les 2.

    Citation Envoyé par Artemus24
    Je me suis intéressé, jadis, à l'alchimie, la spagyrie, l'astrologie.
    Je m'intéresse encore à tout ce qui est ésotérique, mystérieux, et j'aime bien regarder des reportages sur des civilisations anciennement, les ovnis, le paranormal ...
    Je suis tout à l'opposé, à côté de moi, St Thomas est un enfant de cœur
    J'aime aussi l'histoire des civilisations, l'histoire des religions, la sociologie... tout ce qui fait ce que nous sommes aujourd'hui.

    Citation Envoyé par Artemus24
    Pour l'affichage de votre texte en écriture arabe, vous utilisez un logiciel particulier ou vous le faites avec la console windows ?
    Non, j'utilise l'interface graphique Tk en en Perl.

    Citation Envoyé par Artemus24
    Et pourquoi pas un gnomon ?
    Le gnomon n'est rien d'autre le nom générique des cadrans solaires, qui eux ne donnent l'heure que lorsque le soleil est visible.

    Mais j'ai aussi réalisé des cadrans solaires.
    Voici celui que je préfère, le cadran de berger, car il ne nécessite aucun calcul supplémentaire,
    contrairement à tous les autres cadrans auxquels il faut ajouter l'équation du temps à la lecture.

    Voici une variante, dans la journée je ferai une photo d'un vrai !

  18. #18
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Pas encore couché ou bien déjà debout ?

    Citation Envoyé par dmganges
    De mon côté le seul résultat correct à l'affichage est :
    - CodePage 1252 forcé avant le lancement du pgm.pl
    - pgm.pl encodé en "utf-8 (sans bom)"
    - pas de modification du CodePage à l'intérieur du pgm.pl
    Avec le CodePage windows-1252, j'obtiens bien un affichage correcte aussi !

    Après si je fais une translation dans un autre charset (par exemple UTF-8), j'obtiens l'affichage des caractères qui sont présent dans Windows-1252, à la condition que ceux-ci existent déjà.

    Mais comme je vous l'ai dit, je ne cherche pas à faire des translations, mais à utiliser tous les caractères que le CodePage peut m'offrir à l'état natif.

    Citation Envoyé par dmganges
    Effectivement, maintenant qui j'y pense, perso j'ai dû passer en TT Consolas pour avoir le €
    Attention à ne pas confondre le charset et la police.
    Le charset définit la codification. Par exemple le code décimal 128 pour windows-1252 correspond au symbole '€'.
    Mais dans la police, vous pouvez soit avoir le dessin '€' ou un simple carré.

    En ce qui me concerne, j'ai à ma disposition :
    --> Anonymous Pro
    --> Consolas
    --> Courier New
    --> Déjà vu Mono
    --> Droid sans Mono
    --> Liberation Mono
    --> lucida console
    --> Monaco
    --> Source code pro
    Ce sont tous des "True Type".
    J'ai aussi :
    --> Police Raster.

    J'ai fait des tests, mais j'obtiens toujours ce problème d'affichage sur la ligne suivante.
    En faisant quelques recherches sur le net, je me suis aperçu que l'affichage UTF-8 dans la console Windows posait quelques problèmes.
    Je laisse tomber ce UTF-8 pour la console Windows, vu que cela fonctionne parfaitement avec windows-1252.

    Citation Envoyé par dmganges
    Je suis tout à l'opposé, à côté de moi, St Thomas est un enfant de cœur
    Je cherche surtout à comprendre, plus qu'à trouver la vérité.
    Mais quand on raisonne juste, on finit par trouver ce qui se cache derrière certains mystères.

    Citation Envoyé par dmganges
    J'aime aussi l'histoire des civilisations, l'histoire des religions, la sociologie...
    Je suis un peu allergique à la religion, mais je préfère de loin la philosophie. Sinon l'histoire m'intéresse aussi.

    Citation Envoyé par dmganges
    tout ce qui fait ce que nous sommes aujourd'hui.
    Trop long et pas l'endroit pour dire tout ce que je pense de ce que notre monde est devenu.
    Les causes sont moins culturelles ou historiques, mais plus psychologiques.

    Citation Envoyé par dmganges
    Non, j'utilise l'interface graphique Tk en en Perl.
    TKinter, c'est-à-dire sous Python et sous Linux.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  19. #19
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Disons debout, "déjà" n'est qu'une appréciation.

    Citation Envoyé par Artemus24
    Mais comme je vous l'ai dit, je ne cherche pas à faire des translations, mais à utiliser tous les caractères que le CodePage peut m'offrir à l'état natif.
    ...
    Attention à ne pas confondre le charset et la police.
    Le charset définit la codification. Par exemple le code décimal 128 pour windows-1252 correspond au symbole '€'.
    Mais dans la police, vous pouvez soit avoir le dessin '€' ou un simple carré.
    ...
    J'ai fait des tests, mais j'obtiens toujours ce problème d'affichage sur la ligne suivante.
    J'ai bien compris ce que vous désirez faire, et j'en suis au même point que vous !
    Chez moi, seule la police Consolas, affiche le caractère € dans le charset cp457, ce qui me convient parfaitement.
    Je ne passe pas en cp1252 car d'autres programmes ne fonctionnent plus correctement, et que je n'en ai pas l’utilité.

    Citation Envoyé par Artemus24
    Je laisse tomber ce UTF-8 pour la console Windows, vu que cela fonctionne parfaitement avec windows-1252.
    C'est une sage décision

    Je suis foncièrement allergique aux religions, mais pas à leurs histoires !
    Aucun atome crochu avec l'ésotérisme, et philosophiquement matérialiste, dans la droite ligne de Démocrite à Comte-Sponville en passant par Freud, Nietzsche, Schopenhauer... les plus terre à terre quoi !
    Et ce n'est pas l'actualité qui RISQUE de me faire changer
    Pour ce qui est de la connaissance, de la compréhension, notamment celle de l'humain, mais pas seulement, je suis irrémédiablement au côté de Spinoza.

    Pour le vrai cadran de berger le soleil n'est pas encore levé !
    Époustouflant cette persistance à vouloir que le soleil se lève et se couche, après Copernic, Galilée, Bruno, Tycho Brahe...
    Spinoza à encore raison :
    La connaissance du vrai ne supprime pas l'idée du faux

    [EDIT 08:40] Berger
    J'ai supprimé ceux inutiles.
    Je supprimerai les images d'écran la semaine prochaine.
    Le soleil est encore bas et faible, et je n'ai pas le temps d'attendre la précision maxi : le solstice d'été à 12:00 :

  20. #20
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dmganges.

    Citation Envoyé par Dmganges
    j'en suis au même point que vous !
    Pas tout à fait, car vous n'avez pas autant de police que moi pour la console perl.
    Et maintenant, j'utilise le charset windows-1252 à la console perl que j'interprète comme du latin1 dans les script perl.
    Et mes scripts perl sont encodé en ANSI (Windows-1252) sous Notepad++.

    Citation Envoyé par Dmganges
    C'est une sage décision
    Oui, en effet, l'utf8 ne fonctionne pas correctement à la console batch ou perl !
    Je n'en ai aucun usage car je travaille que sous windows.

    Citation Envoyé par Dmganges
    Je suis foncièrement allergique aux religions, mais pas à leurs histoires !
    La religion d'aujourd'hui ne m'intéresse pas du tout. Je la trouve pauvre et sans intérêt.
    Et elle va à l'encontre de mes idées gnostiques (de la gnose chrétienne des premiers temps) car je réfute l'idée de passer par un intermédiaire, entre autre le prêtre, pour atteindre Dieu.
    J'ai un démarche spirituelle, animiste et panthéiste.

    Citation Envoyé par Dmganges
    Aucun atome crochu avec l'ésotérisme
    Vous avez tort, car si la religion est l'éxotérisme, l'initiation est nécessairement ésotérique !
    Autrement dit, la vraie connaissance de ce que véhicule la religion est cachée. Ce que tout le monde connait n'est que fable et superstition.

    Citation Envoyé par Dmganges
    et philosophiquement matérialiste
    Je ne suis pas du tout matérialiste. Ma démarche est basée sur la quête de la connaissance et seulement ça.

    Citation Envoyé par Dmganges
    les plus terre à terre quoi !
    Comme le sous-titre d'une série de science fiction bien connue (X files), je dirais que "la vérité est ailleurs".
    Ce n'est pas en ayant le nez dans les bouquins que l'on peut comprendre ce qui se passe autour de nous.

    Citation Envoyé par Dmganges
    je suis irrémédiablement au côté de Spinoza.
    Pour les modernes, oui, mes idées sont assez proches, mais je reste quand même attachés à la philosophie grecque ancienne.
    Ou si vous préférez à celles des premiers chrétiens, ou encore à celles des anciennes religions.

    Puisque vous vous intéressez au soleil, juste une question.
    Y-a-t-il un phénomène particulier à l'aurore ou lors d'une éclipse ?

    Citation Envoyé par Dmganges
    Je supprimerai les images d'écran la semaine prochaine.
    C'est une bonne idée de faire du nettoyage afin de laisser ce sujet conforme à son titre.

    En ce qui me concerne, le sujet est résolu !

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. commande "at" pour lancer un batch: petit souci
    Par mathieu_r dans le forum Windows
    Réponses: 2
    Dernier message: 06/06/2006, 09h27
  2. pc portable+port com pour cable console
    Par Mut dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 17/01/2006, 10h36
  3. PB pour faire un batch
    Par Manusbarbe dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 18/08/2005, 09h07
  4. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  5. X11 obligatoire pour install console ?
    Par ovh dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/11/2003, 16h50

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