OVH Cloud OVH Cloud

caractères accentués sur PC

14 réponses
Avatar
Jacques Noël
Bonjour,
Je fais mes premiers pas avec ActivePerl , sur PC avec Windows XP.
Lorsque je lance un ordre print avec une chaîne comportant des lettres
accentuées, celles ci sont remplacées à l'écran par des caractères
différents.
Connaissez vous la raison? y a t il une solution simple?

Si je remplace le caractère accentué par une barre oblique inverse \ suivie
du numéro de caractère dans le codage PC, en octal, l'affichage redevient
correct, mais ce n'est pas très pratique.

J'utilise perl en ligne de commande à partir du DOS, et non à partir de
Windows. Est ce que le codage est différent avec DOS et avec Windows, ce que
je viens de lire, et qui pourrait expliquer le problème?

Cordialement

Jacques Noël

4 réponses

1 2
Avatar
Paul Gaborit
À (at) Fri, 19 Nov 2004 14:14:16 +0100,
"Jacques Noël" écrivait (wrote):
Mais, au fait, travaillez-vous vraiment sous DOS ? Ou sous Windows avec son
interpréteur de commandes ?


Je ne suis pas sûr de bien comprendre la question : je lance mon PC sous
Windows XP, puis je lance "invite de commandes", je me retrouve dans une
fenêtre noire où il faut parler DOS pour changer de répertoire et ouvrir les
fichiers.
C'est probablement votre deuxième cas ?


C'est bien cela (j'oublie toujours le nom "invite de commandes").

Dans le second cas, l'utilisation d'un tout petit bout de Perl/Tk vous
permettrait de vous affranchir de ce problème et d'utiliser le codage
iso-latin-1 (qui est très proche du codage Windows) voire même utf-8 pour
tous
vos affichages.
Je suis prêt à essayer : où trouve-t-on ce bout de code ? Faut il l'intégrer

dans les fichiers contenant les programmes ?


Ajoutez cela au début de votre script (il vous faudra peut-être installer le
module IO::Scalar auparavant). Ce n'est pas idéal car, en fait, toutes les
sorties sont accumulées dans un scalaire (qui grossit donc au fur et à mesure)
qui n'est affiché qu'en fin de script. Mais pour de petite sortie (< 100k), ça
marche bien. De plus, cela ne résoud pas le problème des erreurs de
compilation qui continue à s'afficher dans la fenêtre d'invite de
commande. Mais, heureusement ces messages comportent rarement des accents ;-)

------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
use warnings;
use Tk;
use IO::Scalar;

my $out;
tie *STDOUT, 'IO::Scalar', $out;
tie *STDERR, 'IO::Scalar', $out;

END {
my $mw = MainWindow->new;
my $text $mw
->Scrolled('Text',
qw/-scrollbars se -bg white -fg black -wrap none/)
->pack(qw/-fill both -expand 1/);
$text->insert('0.0', $out);
MainLoop;
}

# ici commence votre script classique
# j'y ai mis un exemple avec des print, des warn et un die...

print "essain";
foreach (1..100) {
warn "warning: $_ est multiple de 10n"
if $_ % 10 == 0;
print "$_n";
}
die "Bug !!!n";
------------------------------------------------------------

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>


Avatar
jl_morel
Dans l'article <419c951b$0$8350$,
a dit...
[...]
Je fais mes premiers pas avec ActivePerl , sur PC avec Windows XP.
Lorsque je lance un ordre print avec une chaîne comportant des lettres
accentuées, celles ci sont remplacées à l'écran par des caractères
différents.
Connaissez vous la raison? y a t il une solution simple?

Si je remplace le caractère accentué par une barre oblique inverse suivie
du numéro de caractère dans le codage PC, en octal, l'affichage redevient
correct, mais ce n'est pas très pratique.

J'utilise perl en ligne de commande à partir du DOS, et non à partir de
Windows. Est ce que le codage est différent avec DOS et avec Windows, ce que
je viens de lire, et qui pourrait expliquer le problème?

[...]


La question des caractères accentués sous Windows est récurrente.
(À propos : il y a longtemps que je n'ai pas vu passer la FAQ. Elle est
morte ?)

Je résume tout ce que je connais sur le sujet :

Windows utilise le jeu de caracteres WinLatin1 (CP 1252) une variante
Microsoft de ISO-8859-1 (Latin1).
La console DOS dans laquelle tourne Perl utilise le jeu CP 850 DOSLatin1.
Les deux jeux de caractères ne correspondent pas pour les caractères
étendus (code_ASCII >= 128).
Voir Microsoft :

http://www.microsoft.com/globaldev/reference/cphome.mspx

* Certain éditeurs sous Win permettent de faire la conversion (par ex.
Ultraedit OEM <-> ANSI) : la traduction WIN->DOS est faite une fois pour
toute dans le script.

* Vous pouvez utiliser un éditeur DOS (pas besoin de conversion, c'est du
DOS->DOS). Par exemple, vous tapez dans votre console "edit" puis [Enter].
Vous êtes sous le bon vieil éditeur MSDOS antédiluvien. Si vous aimez le
rustique, c'est parfait; mais si vous voulez la coloration syntaxique,
l'indentation automatique et autres gadgets à la mode, vous allez être déçu.

* Si vous utilisez Perl 5.8, le mieux est d'utiliser un éditeur Windows et
de demander à Perl de faire la conversion Win->DOS. Il suffit d'ajouter

use encoding "cp1252", STDOUT => "cp850";

au début du script.

* Si vous utilisez Windows NT/2000/XP vous pouvez, après avoir sélectionné
la police Lucida Console (True Type), changer le codepage de la console
avec la commande dos : chcp 1252 et les jolis caractères français vont
s'afficher normalement (pas de conversion, c'est du Win->Win).

* Si vous utilisez des scripts écrits pour Linux vous pouvez utilisez le
module Win32::Console::ANSI (Perl 5.6 ou 5.8). En ajoutant un
use Win32::Console::ANSI;
en début de script, la console DOS se comportera (presque) comme une
console Linux. Voir :

http://www.bribes.org/perl/wANSIConsole.html

HTH

--
J-L.M.

Avatar
Paul Gaborit
À (at) 19 Nov 2004 15:12:40 GMT,
(Jean-Louis MOREL) écrivait (wrote):
* Si vous utilisez Perl 5.8, le mieux est d'utiliser un éditeur Windows et
de demander à Perl de faire la conversion Win->DOS. Il suffit d'ajouter

use encoding "cp1252", STDOUT => "cp850";

au début du script.


C'est le truc qui me semble le plus simple dans un premier temps. En fait,
c'est ça que je cherchais quand, dans ma réponse précédente, j'évoquais le
passage par Encode::*.

Au passage, il faut peut-être le faire aussi pour STDERR.

* Si vous utilisez Windows NT/2000/XP vous pouvez, après avoir sélectionné
la police Lucida Console (True Type), changer le codepage de la console
avec la commande dos : chcp 1252 et les jolis caractères français vont
s'afficher normalement (pas de conversion, c'est du Win->Win).


Ça, je ne connaissais pas. C'est marrant que Microsoft propose cela ;-)

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Jacques Noël
Je fais mes premiers pas avec ActivePerl , sur PC avec Windows XP.
Lorsque je lance un ordre print avec une chaîne comportant des lettres
accentuées, celles ci sont remplacées à l'écran par des caractères
différents.
Connaissez vous la raison? y a t il une solution simple?



* Si vous utilisez Perl 5.8, le mieux est d'utiliser un éditeur Windows et
de demander à Perl de faire la conversion Win->DOS. Il suffit d'ajouter

use encoding "cp1252", STDOUT => "cp850";


Merci de votre réponse très précise et claire.
L'utilisation de la ligne de code indiquée ci dessus règle efffectivement
le problème.

Jacques Noël


1 2