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 :

Console DOS et accents


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut Console DOS et accents
    Salut,

    Comme vous le savez, il est impossible d'afficher des accents sous une console DOS.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Tété est à la maison\n";
    donne ceci
    T├®t├® est ├á la maison
    Je ne me rappelle plus du code Perl permettant d'afficher un accent tel é sur la console dos.

    Merci

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je me réponds :
    ü : \x81
    é : \x82
    â : \x83
    ä : \x84
    à : \x85
    ç : \x87
    ê : \x88
    ë : \x89
    è : \x8A
    ï : \x8B
    î : \x8C

    Si quelqu'un a une liste plus complète (un site)

  3. #3
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Y a t il une façon plus propre d'afficher les accents correctement sous la console DOS, même si dans les faits, l'affichage est correct.

    J'ai vu une liste dans le module Locale::RecodeData::IBM865 .
    Ça peut être intéressant d'implémenter un print like (printDOS) uniquement pour l'affichage sous DOS et convertissant tous les caractères accentués en code hexa via cette liste :
    Local | ISO-10646 | Description
    -------+-----------+-------------------------------------------------
    00 | 00000000 | NULL (NUL)
    01 | 00000001 | START OF HEADING (SOH)
    02 | 00000002 | START OF TEXT (STX)
    03 | 00000003 | END OF TEXT (ETX)
    04 | 00000004 | END OF TRANSMISSION (EOT)
    05 | 00000005 | ENQUIRY (ENQ)
    06 | 00000006 | ACKNOWLEDGE (ACK)
    07 | 00000007 | BELL (BEL)
    08 | 00000008 | BACKSPACE (BS)
    09 | 00000009 | CHARACTER TABULATION (HT)
    0A | 0000000A | LINE FEED (LF)
    0B | 0000000B | LINE TABULATION (VT)
    0C | 0000000C | FORM FEED (FF)
    0D | 0000000D | CARRIAGE RETURN (CR)
    0E | 0000000E | SHIFT OUT (SO)
    0F | 0000000F | SHIFT IN (SI)
    10 | 00000010 | DATALINK ESCAPE (DLE)
    11 | 00000011 | DEVICE CONTROL ONE (DC1)
    12 | 00000012 | DEVICE CONTROL TWO (DC2)
    13 | 00000013 | DEVICE CONTROL THREE (DC3)
    14 | 00000014 | DEVICE CONTROL FOUR (DC4)
    15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK)
    16 | 00000016 | SYNCHRONOUS IDLE (SYN)
    17 | 00000017 | END OF TRANSMISSION BLOCK (ETB)
    18 | 00000018 | CANCEL (CAN)
    19 | 00000019 | END OF MEDIUM (EM)
    1A | 0000001A | SUBSTITUTE (SUB)
    1B | 0000001B | ESCAPE (ESC)
    1C | 0000001C | FILE SEPARATOR (IS4)
    1D | 0000001D | GROUP SEPARATOR (IS3)
    1E | 0000001E | RECORD SEPARATOR (IS2)
    1F | 0000001F | UNIT SEPARATOR (IS1)
    20 | 00000020 | SPACE
    21 | 00000021 | EXCLAMATION MARK
    22 | 00000022 | QUOTATION MARK
    23 | 00000023 | NUMBER SIGN
    24 | 00000024 | DOLLAR SIGN
    25 | 00000025 | PERCENT SIGN
    26 | 00000026 | AMPERSAND
    27 | 00000027 | APOSTROPHE
    28 | 00000028 | LEFT PARENTHESIS
    29 | 00000029 | RIGHT PARENTHESIS
    2A | 0000002A | ASTERISK
    2B | 0000002B | PLUS SIGN
    2C | 0000002C | COMMA
    2D | 0000002D | HYPHEN-MINUS
    2E | 0000002E | FULL STOP
    2F | 0000002F | SOLIDUS
    30 | 00000030 | DIGIT ZERO
    31 | 00000031 | DIGIT ONE
    32 | 00000032 | DIGIT TWO
    33 | 00000033 | DIGIT THREE
    34 | 00000034 | DIGIT FOUR
    35 | 00000035 | DIGIT FIVE
    36 | 00000036 | DIGIT SIX
    37 | 00000037 | DIGIT SEVEN
    38 | 00000038 | DIGIT EIGHT
    39 | 00000039 | DIGIT NINE
    3A | 0000003A | COLON
    3B | 0000003B | SEMICOLON
    3C | 0000003C | LESS-THAN SIGN
    3D | 0000003D | EQUALS SIGN
    3E | 0000003E | GREATER-THAN SIGN
    3F | 0000003F | QUESTION MARK
    40 | 00000040 | COMMERCIAL AT
    41 | 00000041 | LATIN CAPITAL LETTER A
    42 | 00000042 | LATIN CAPITAL LETTER B
    43 | 00000043 | LATIN CAPITAL LETTER C
    44 | 00000044 | LATIN CAPITAL LETTER D
    45 | 00000045 | LATIN CAPITAL LETTER E
    46 | 00000046 | LATIN CAPITAL LETTER F
    47 | 00000047 | LATIN CAPITAL LETTER G
    48 | 00000048 | LATIN CAPITAL LETTER H
    49 | 00000049 | LATIN CAPITAL LETTER I
    4A | 0000004A | LATIN CAPITAL LETTER J
    4B | 0000004B | LATIN CAPITAL LETTER K
    4C | 0000004C | LATIN CAPITAL LETTER L
    4D | 0000004D | LATIN CAPITAL LETTER M
    4E | 0000004E | LATIN CAPITAL LETTER N
    4F | 0000004F | LATIN CAPITAL LETTER O
    50 | 00000050 | LATIN CAPITAL LETTER P
    51 | 00000051 | LATIN CAPITAL LETTER Q
    52 | 00000052 | LATIN CAPITAL LETTER R
    53 | 00000053 | LATIN CAPITAL LETTER S
    54 | 00000054 | LATIN CAPITAL LETTER T
    55 | 00000055 | LATIN CAPITAL LETTER U
    56 | 00000056 | LATIN CAPITAL LETTER V
    57 | 00000057 | LATIN CAPITAL LETTER W
    58 | 00000058 | LATIN CAPITAL LETTER X
    59 | 00000059 | LATIN CAPITAL LETTER Y
    5A | 0000005A | LATIN CAPITAL LETTER Z
    5B | 0000005B | LEFT SQUARE BRACKET
    5C | 0000005C | REVERSE SOLIDUS
    5D | 0000005D | RIGHT SQUARE BRACKET
    5E | 0000005E | CIRCUMFLEX ACCENT
    5F | 0000005F | LOW LINE
    60 | 00000060 | GRAVE ACCENT
    61 | 00000061 | LATIN SMALL LETTER A
    62 | 00000062 | LATIN SMALL LETTER B
    63 | 00000063 | LATIN SMALL LETTER C
    64 | 00000064 | LATIN SMALL LETTER D
    65 | 00000065 | LATIN SMALL LETTER E
    66 | 00000066 | LATIN SMALL LETTER F
    67 | 00000067 | LATIN SMALL LETTER G
    68 | 00000068 | LATIN SMALL LETTER H
    69 | 00000069 | LATIN SMALL LETTER I
    6A | 0000006A | LATIN SMALL LETTER J
    6B | 0000006B | LATIN SMALL LETTER K
    6C | 0000006C | LATIN SMALL LETTER L
    6D | 0000006D | LATIN SMALL LETTER M
    6E | 0000006E | LATIN SMALL LETTER N
    6F | 0000006F | LATIN SMALL LETTER O
    70 | 00000070 | LATIN SMALL LETTER P
    71 | 00000071 | LATIN SMALL LETTER Q
    72 | 00000072 | LATIN SMALL LETTER R
    73 | 00000073 | LATIN SMALL LETTER S
    74 | 00000074 | LATIN SMALL LETTER T
    75 | 00000075 | LATIN SMALL LETTER U
    76 | 00000076 | LATIN SMALL LETTER V
    77 | 00000077 | LATIN SMALL LETTER W
    78 | 00000078 | LATIN SMALL LETTER X
    79 | 00000079 | LATIN SMALL LETTER Y
    7A | 0000007A | LATIN SMALL LETTER Z
    7B | 0000007B | LEFT CURLY BRACKET
    7C | 0000007C | VERTICAL LINE
    7D | 0000007D | RIGHT CURLY BRACKET
    7E | 0000007E | TILDE
    7F | 0000007F | DELETE (DEL)
    80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
    81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS
    82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE
    83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
    84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
    85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE
    86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
    87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA
    88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
    89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS
    8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE
    8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS
    8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
    8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE
    8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
    8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
    90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
    91 | 000000E6 | LATIN SMALL LETTER AE
    92 | 000000C6 | LATIN CAPITAL LETTER AE
    93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
    94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
    95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE
    96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
    97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE
    98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
    99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
    9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
    9B | 000000F8 | LATIN SMALL LETTER O WITH STROKE
    9C | 000000A3 | POUND SIGN
    9D | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE
    9E | 000020A7 | PESETA SIGN
    9F | 00000192 | LATIN SMALL LETTER F WITH HOOK
    A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE
    A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE
    A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE
    A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE
    A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE
    A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE
    A6 | 000000AA | FEMININE ORDINAL INDICATOR
    A7 | 000000BA | MASCULINE ORDINAL INDICATOR
    A8 | 000000BF | INVERTED QUESTION MARK
    A9 | 00002310 | REVERSED NOT SIGN
    AA | 000000AC | NOT SIGN
    AB | 000000BD | VULGAR FRACTION ONE HALF
    AC | 000000BC | VULGAR FRACTION ONE QUARTER
    AD | 000000A1 | INVERTED EXCLAMATION MARK
    AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    AF | 000000A4 | CURRENCY SIGN
    B0 | 00002591 | LIGHT SHADE
    B1 | 00002592 | MEDIUM SHADE
    B2 | 00002593 | DARK SHADE
    B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL
    B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
    B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
    B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
    B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
    B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
    B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
    BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL
    BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
    BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
    BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
    BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
    BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
    C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
    C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
    C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
    C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
    C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL
    C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
    C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
    C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
    C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
    C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
    CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
    CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
    CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
    CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
    CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
    CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
    D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
    D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
    D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
    D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
    D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
    D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
    D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
    D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
    D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
    D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT
    DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
    DB | 00002588 | FULL BLOCK
    DC | 00002584 | LOWER HALF BLOCK
    DD | 0000258C | LEFT HALF BLOCK
    DE | 00002590 | RIGHT HALF BLOCK
    DF | 00002580 | UPPER HALF BLOCK
    E0 | 000003B1 | GREEK SMALL LETTER ALPHA
    E1 | 000000DF | LATIN SMALL LETTER SHARP S (German)
    E2 | 00000393 | GREEK CAPITAL LETTER GAMMA
    E3 | 000003C0 | GREEK SMALL LETTER PI
    E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA
    E5 | 000003C3 | GREEK SMALL LETTER SIGMA
    E6 | 000000B5 | MICRO SIGN
    E7 | 000003C4 | GREEK SMALL LETTER TAU
    E8 | 000003A6 | GREEK CAPITAL LETTER PHI
    E9 | 00000398 | GREEK CAPITAL LETTER THETA
    EA | 000003A9 | GREEK CAPITAL LETTER OMEGA
    EB | 000003B4 | GREEK SMALL LETTER DELTA
    EC | 0000221E | INFINITY
    ED | 000003C6 | GREEK SMALL LETTER PHI
    EE | 000003B5 | GREEK SMALL LETTER EPSILON
    EF | 00002229 | INTERSECTION
    F0 | 00002261 | IDENTICAL TO
    F1 | 000000B1 | PLUS-MINUS SIGN
    F2 | 00002265 | GREATER-THAN OR EQUAL TO
    F3 | 00002264 | LESS-THAN OR EQUAL TO
    F4 | 00002320 | TOP HALF INTEGRAL
    F5 | 00002321 | BOTTOM HALF INTEGRAL
    F6 | 000000F7 | DIVISION SIGN
    F7 | 00002248 | ALMOST EQUAL TO
    F8 | 000000B0 | DEGREE SIGN
    F9 | 00002219 | BULLET OPERATOR
    FA | 000000B7 | MIDDLE DOT
    FB | 0000221A | SQUARE ROOT
    FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N
    FD | 000000B2 | SUPERSCRIPT TWO
    FE | 000025A0 | BLACK SQUARE
    FF | 000000A0 | NO-BREAK SPACE

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Il faut mettre stdout avec l'encodage correct, ou utiliser l'un des modules spécialisés. (chcp permet de récupérer la codepage correcte)

    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
    #!/usr/bin/perl
    use strict; use warnings;
    use utf8; use 5.10.0;
     
    my ($codepage) = (`chcp` =~ m/:\s+(\d+)/);
    foreach my $h ( \*STDOUT, \*STDERR, \*STDIN ) {
      binmode $h, ":encoding(cp$codepage)";
    }
     
    say "J'essaie d'utiliser des accents àéé";
     
    say "Essayons les entrées-sorties : ";
    my $input = <>;
    print $input;
     
    open my($file), '>:utf8', "testOutput"
      or die "Cannot open testOutput : $!\n";
    print {$file} $input;
     
    __END__
    Le système de gestion des encodages de Perl est excellent, puissant et pratique, mais mal compris par pas mal de gens.

    --
    Jedaï

  5. #5
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Il faut mettre stdout avec l'encodage correct, ou utiliser l'un des modules spécialisés. (chcp permet de récupérer la codepage correcte)

    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
    #!/usr/bin/perl
    use strict; use warnings;
    use utf8; use 5.10.0;
     
    my ($codepage) = (`chcp` =~ m/:\s+(\d+)/);
    foreach my $h ( \*STDOUT, \*STDERR, \*STDIN ) {
      binmode $h, ":encoding(cp$codepage)";
    }
     
    say "J'essaie d'utiliser des accents àéé";
     
    say "Essayons les entrées-sorties : ";
    my $input = <>;
    print $input;
     
    open my($file), '>:utf8', "testOutput"
      or die "Cannot open testOutput : $!\n";
    print {$file} $input;
     
    __END__
    Le système de gestion des encodages de Perl est excellent, puissant et pratique, mais mal compris par pas mal de gens.

    --
    Jedaï
    Ok.
    La commande chcp permet d'afficher le numéro du jeu de caractères (page de codes) en cours.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($codepage) = (`chcp` =~ m/:\s+(\d+)/);
    récupère ainsi le code : 850 dans mon cas.

    Ensuite tu encodes tout ce qui passe par STDOUT, STDERR et STDIN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach my $h ( \*STDOUT, \*STDERR, \*STDIN ) {
      binmode $h, ":encoding(cp$codepage)";
    }
    Par contre, si notre script est en utf8, il faut absolument mettre sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "J'essaie d'utiliser des accents àéé\n";
    print "Essayons les entrées-sorties : \n";
    s'affiche mal, par contre le résultat du STDIN est OK,

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par djibril Voir le message
    Par contre, si notre script est en utf8, il faut absolument mettre sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "J'essaie d'utiliser des accents àéé\n";
    print "Essayons les entrées-sorties : \n";
    s'affiche mal, par contre le résultat du STDIN est OK,
    Tout à fait, c'est indépendant de la question de la console, si Perl ne sait pas que ton script est en utf8 il le lira incorrectement. Tout mes scripts sont en utf8, strict, avec warnings et sous 5.10 maintenant, donc je rajoute automatiquement les deux lignes initiales (il y a des moyens de réunir tout ça dans un seul import toutefois).

    En fait le système de Perl est relativement simple : les strings sont soit des chaînes d'octets, soit des chaînes de caractères. Si elles sont des chaînes de caractères peu importe leur origine, elles sont "compatibles", les regexs marchent bien, les concaténations aussi, etc...
    Donc tout va bien en interne, mais il est important d'effectuer les traductions correcte sur les interfaces avec le monde extérieur. Si ce n'est pas le cas, alors les choses peuvent mal se passer.
    Le problème c'est que de temps en temps ça marche quand même, ce qui laisse le débutant croire qu'il a fait ça correctement : par exemple même s'il ne change pas l'encodage sur STDOUT et STDIN, ce qu'il lit sur STDIN s'affichera correctement sur STDOUT, c'est pour ça que j'ai rajouté l'écriture vers un fichier en utf8, sans les changements d'encodage, ceci échoue, alors qu'avec mon script ça réussit (bien que l'encodage d'origine et d'arrivée soient complètement différent, et d'ailleurs que l'encodage d'arrivée ne soit pas toujours le même non plus).

    La possibilité d'écrire son script dans un encodage quelconque (pris en charge par Perl, cf le pragma encoding) n'est qu'un bonus bienvenue pour les programmeurs non-anglais.

    --
    Jedaï

  7. #7
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Tout à fait d'accord avec toi.
    Pour l'instant je travail sous Perl 5.8.8, Il est vrai que je pourrais passer à Perl 5.10, mais bon, pour l'instant je n'ai pas changé.
    Concernant l'encodage de mes scripts, ils sont tous en utf8, mais il est vrai qu'en cas de changement d'éditeurs de texte, de PC, etc, les éditeurs ne sont pas toujours configurés en utf8 par défaut, donc il faut vraiment y penser, sous Linux, la question ne se pose plus.
    D'ailleurs question bête, est il possible au sein même du script de savoir si on est en utf8 ou non ?
    Pour la création d'un fichier en utf8, c'est moins compliqué car quelque soit l'encodage du script, open permet de préciser un encodage si besoin.

    Sinon, il est aussi possible s'il on ne souhaite pas appliquer l'encodage cpXXX sur tout le STDOUT d'utiliser le module Encode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use utf8;
    use Encode;
    print encode("cp$codepage", $text);
    Sinon, jedai, dans tous les cas, on peut toujours utiliser le code hexa non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "J'essaie d'utiliser des accents \x85\x82\x82\n";
    Dans tous les cas, quelque soit l'encodage du script, ça passe. Je rappel que le but est juste de faire un affichage avec accents sur une console DOS.

  8. #8
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par djibril Voir le message
    Sinon, jedai, dans tous les cas, on peut toujours utiliser le code hexa non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "J'essaie d'utiliser des accents \x85\x82\x82\n";
    On peut (pourvu qu'on ne touche pas aux encodage des handles), mais ça me semble une mauvaise idée à plusieurs titres : d'une part la chaîne n'est plus lisible directement dans votre code, ce qui est désagréable (et comme tu viens de le prouver, se rappeler des codes hexa correct éternellement n'est pas donné à tout le monde) a fortiori pour un autre programmeur, d'autre part si tu prends cette habitude, que ton script grossit et que tu veux le rendre multi-plateforme, tu vas devoir changer ces chaînes éparpillées parmi tes scripts et modules au lieu de changer un petit bout de code, finalement la solution que je propose a une portée plus générale que l'utilisation de code hexa (et elle n'est guère plus lourde, 3 lignes de code en début de script) puisqu'elle traitera également les affichages et chaînes provenant de modules tiers.

    --
    Jedaï

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

Discussions similaires

  1. Cacher la console dos
    Par Jbx 2.0b dans le forum SDL
    Réponses: 5
    Dernier message: 09/10/2009, 12h15
  2. Console DOS
    Par Cartouche dans le forum GLUT
    Réponses: 7
    Dernier message: 25/04/2006, 21h50
  3. [base de registre] Ouverture console DOS sur click droit
    Par SteelBox dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 11/02/2006, 02h02
  4. Postgresql 8, pgadmin et console Dos
    Par djibril dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 04/02/2005, 16h48
  5. [Encodage] Charset et console Dos
    Par ToYonos dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 01/02/2005, 12h10

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