OVH Cloud OVH Cloud

Probleme d'accent avec Perl Tk et MAC

34 réponses
Avatar
Frantz DORSEMAINE
Bonjour à tous. J'ai un problème urgent à résoudre.

Voila ma configuration :

Mac OSX 10.6.5
Perl 5.8.9

Voila un script test :
#! /usr/bin/perl -w

use Encode::Unicode;
use Tk;


use strict;
use warnings;

my $wd=MainWindow->new(-width => 400, -height => 200
);


my $bt=$wd->Button(-text=>"éééé èèèèèè", -command => sub { &Hello
})->place(-x=> 10, -y=> 30);

MainLoop;

sub Hello {
print "Hello\n"
}

Les accents sur le bouton s'affiche \x(8e) \x(8f)

Voila je cherche depuis 2 jour et rien à faire, pas de solution. J'ai vu
sur un forum que l'on parlai éventuellement d'un problème avec X11,
voici ma version X11 :XQuartz 2.3.6 (xorg-server 1.4.2-apple56)

J'espère que quelqu'un a une solution
A+ Frantz

10 réponses

1 2 3 4
Avatar
perlgenome
Sous ton éditeur de texte pspad, notepad++ ou autre, il y a
généralement un moyen de mettre ton programme en UTF-8.
Avatar
Frantz DORSEMAINE
Le 29/11/10 17:07, perlgenome a écrit :
Sous ton éditeur de texte pspad, notepad++ ou autre, il y a
généralement un moyen de mettre ton programme en UTF-8.




J'utilise Komodo sous MAC et en effet il y a une zone de paramètre
encodage que j'ai mis a utf8.

Voici le script

#! /usr/bin/perl -w

#use Encode::Unicode;

use utf8;
use Tk;



use strict;
use warnings;



my $wd=MainWindow->new(-width => 400, -height => 200
);


my $bt=$wd->Button(-text=>'ééé', -command => sub { &Hello })->place(-x=>
10, -y=> 30);

MainLoop;

sub Hello {
print "Hellon"
}

Voici le debug :

FLAGS = (POK,pPOK,UTF8)
PV = 0x12ba600 "216216216"Malformed UTF-8 character (unexpected
continuation byte 0x8e, with no preceding start byte) in subroutine
entry at /usr/local/ActivePerl-5.8/lib/Tk/Widget.pm line 205.
Malformed UTF-8 character (unexpected continuation byte 0x8e, with no
preceding start byte) in subroutine entry at
/usr/local/ActivePerl-5.8/lib/Tk/Widget.pm line 205.
Malformed UTF-8 character (unexpected continuation byte 0x8e, with no
preceding start byte) in subroutine entry at
/usr/local/ActivePerl-5.8/lib/Tk/Widget.pm line 205.
[UTF8 "x{0}x{0}x{0}"]
CUR = 3
LEN = 4


Il y a du nouveau j'ai des point d'interrogation à la place des éééééé
Avatar
Olivier Miakinen
Le 29/11/2010 18:03, Frantz DORSEMAINE a écrit :

J'utilise Komodo sous MAC et en effet il y a une zone de paramètre
encodage que j'ai mis a utf8.



C'est un menu déroulant, ou bien tu as saisi à la main la chaîne
« utf8 » ? Encore une fois, le nom officiel est « UTF-8 », et
même si la casse des caractères n'a en général pas d'importance,
l'absence du trait d'union pourrait en avoir (mais si Komodo ne
propose que « utf8 » et pas « UTF-8 » c'est juste qu'ils n'ont pas
fait gaffe eux-mêmes).

use utf8;



Ah, il n'y a pas de trait d'union ici, mais c'est sans doute dû à une
limitation des caractères autorisés pour un « use »... ;-)

Voici le debug :

[...] (unexpected continuation byte 0x8e, with no
preceding start byte) [...]



Tu as toujours un octet 0x8e, qui est la valeur du « é » dans MacRoman
et pas dans UTF-8 :
<http://www.miakinen.net/vrac/charsets/?o6=MacRoman&or=6&pr2>

Pour le confirmer, mets ton script sur <http://www.cjoint.com/> et
donne-nous l'URL générée : on devrait pouvoir vérifier l'encodage,
et au besoin le transformer de MacRoman en UTF-8
Avatar
Frantz DORSEMAINE
Le 29/11/10 19:01, Olivier Miakinen a écrit :
Le 29/11/2010 18:03, Frantz DORSEMAINE a écrit :

J'utilise Komodo sous MAC et en effet il y a une zone de paramètre
encodage que j'ai mis a utf8.



C'est un menu déroulant, ou bien tu as saisi à la main la chaîne
« utf8 » ? Encore une fois, le nom officiel est « UTF-8 », et
même si la casse des caractères n'a en général pas d'importance,
l'absence du trait d'union pourrait en avoir (mais si Komodo ne
propose que « utf8 » et pas « UTF-8 » c'est juste qu'ils n'ont pas
fait gaffe eux-mêmes).

use utf8;



Ah, il n'y a pas de trait d'union ici, mais c'est sans doute dû à une
limitation des caractères autorisés pour un « use »... ;-)

Voici le debug :

[...] (unexpected continuation byte 0x8e, with no
preceding start byte) [...]



Tu as toujours un octet 0x8e, qui est la valeur du « é » dans MacRoman
et pas dans UTF-8 :
<http://www.miakinen.net/vrac/charsets/?o6=MacRoman&or=6&pr2>

Pour le confirmer, mets ton script sur<http://www.cjoint.com/> et
donne-nous l'URL générée : on devrait pouvoir vérifier l'encodage,
et au besoin le transformer de MacRoman en UTF-8




Désolé mais c'est bien un menu déroulant et c'est UTF-8 dans Komodo et
use utf8; dans le script.
J'ai essayé avec texedit et enregistrer sous en UTF-8 et c'est la même
chose.
Voici le lien généré http://cjoint.com/?0lDxbDyctqf
Merci à tous pour votre aide car j'ai vraiment besoin de me sortir de
là. Frantz
Avatar
Olivier Miakinen
Le 29/11/2010 23:03, Frantz DORSEMAINE a écrit :

Désolé mais c'est bien un menu déroulant et c'est UTF-8 dans Komodo et
use utf8; dans le script.



Parfait.

J'ai essayé avec texedit et enregistrer sous en UTF-8 et c'est la même
chose.
Voici le lien généré http://cjoint.com/?0lDxbDyctqf



C'était toujours du MacRoman. Voici le même fichier en UTF-8 :

<http://cjoint.com/data/0lDx6IHumtZ_test.pl>.

--
Olivier Miakinen
Avatar
Frantz DORSEMAINE
Le 29/11/10 23:56, Olivier Miakinen a écrit :
Le 29/11/2010 23:03, Frantz DORSEMAINE a écrit :

Désolé mais c'est bien un menu déroulant et c'est UTF-8 dans Komodo et
use utf8; dans le script.



Parfait.

J'ai essayé avec texedit et enregistrer sous en UTF-8 et c'est la même
chose.
Voici le lien généré http://cjoint.com/?0lDxbDyctqf



C'était toujours du MacRoman. Voici le même fichier en UTF-8 :

<http://cjoint.com/data/0lDx6IHumtZ_test.pl>.



J'ai copier coller le contenu du lien mais j'obtiens cette fois des
petits rectangle verticaux à la place des éééé.

Mais c'est peux être pas ca qu'il faut faire?

Frantz
Avatar
Olivier Miakinen
Le 30/11/2010 07:47, Frantz DORSEMAINE a écrit :

C'était toujours du MacRoman. Voici le même fichier en UTF-8 :

<http://cjoint.com/data/0lDx6IHumtZ_test.pl>.



J'ai copier coller le contenu du lien mais j'obtiens cette fois des
petits rectangle verticaux à la place des éééé.



Mauvaise idée. ;-)

Mais c'est peux être pas ca qu'il faut faire?



Clic droit (ou pomme clic, ou je ne sais quel équivalent dans ton
navigateur) et « Enregistrer sous » ou « Save as ».

Méthode alternative : pars de <http://cjoint.com/data/0lDx6IHumtZ.htm>
et en cliquant droit (etc.) sur le lien « test.pl » choisis l'équivalent
de « Save link target as ».

Cordialement,
--
Olivier Miakinen
Avatar
Frantz Dorsemaine
On 30 nov, 08:53, Olivier Miakinen <om+ wrote:
Le 30/11/2010 07:47, Frantz DORSEMAINE a crit :



>> C' tait toujours du MacRoman. Voici le m me fichier en UTF-8 :

>> <http://cjoint.com/data/0lDx6IHumtZ_test.pl>.

> J'ai copier coller le contenu du lien mais j'obtiens cette fois des
> petits rectangle verticaux la place des .

Mauvaise id e. ;-)

> Mais c'est peux tre pas ca qu'il faut faire?

Clic droit (ou pomme clic, ou je ne sais quel quivalent dans ton
navigateur) et Enregistrer sous ou Save as .

M thode alternative : pars de <http://cjoint.com/data/0lDx6IHumtZ.htm>
et en cliquant droit (etc.) sur le lien test.pl choisis l' quivalent
de Save link target as .

Cordialement,
--
Olivier Miakinen



Pas mieux, je devient fou! Help!
Avatar
Olivier Miakinen
Le 30/11/2010 17:10, Frantz Dorsemaine a écrit :

Pas mieux, je devient fou! Help!



Bon, on va essayer autre chose, puisque apparemment tu ne sais sauver
qu'en MacRoman. Reprends ton fichier de départ, en MacRoman donc, et
on va tenter de gruger l'éditeur de texte... ;-)

Tout d'abord, vérifie que tu retrouves bien le message d'erreur qui dit
« Malformed UTF-8 character (unexpected continuation byte 0x8e, with no
preceding start byte) ». C'est bon ?


Voyons <http://www.miakinen.net/vrac/charsets/?o6=MacRoman&or=6&pr2>.

Dans la partie droite, on lit :
MacRoman é U+00E9 &#233; &eacute; C3 A9

Le caractère é devrait être constitué des octets C3 et A9 (en UTF-8) au
lieu de l'octet 8E (qui est du MacRoman). Mais les octets C3 et A9,
comme d'ailleurs tous les octets de 80 à FF, correspondent tous à un
caractère dans MacRoman : C3 = √ et A9 = © !

Du coup, remplace tous les « é » par la séquence « √© », vérifie qu'il
n'existe aucun autre caractère accentué, et sauve le fichier en MacRoman.

Si je ne m'abuse, ton essai devrait être avec le code suivant :
====================================================================== #! /usr/bin/perl -w

#use Encode::Unicode;

use utf8;
use Tk;

use strict;
use warnings;

my $wd=MainWindow->new(-width => 400, -height => 200
);

my $bt=$wd->Button(-text=>'ééé', -command => sub { &Hello
})->place(-x=> 10, -y=> 30);

MainLoop;

sub Hello {
print "Hellon"
}
======================================================================
Si jamais ça marche, tu pourras essayer d'ajouter des « è » sous la
forme « √® » ou des « à » sous la forme « √† ».


Après ça, tu pourras aussi essayer de relire le fichier avec ton éditeur
pour voir s'il comprend enfin que c'est de l'UTF-8 -- ou bien chercher
un autre éditeur de texte plus performant !

Cordialement,
--
Olivier Miakinen
Avatar
Frantz Dorsemaine
On 30 nov, 17:32, Olivier Miakinen <om+ wrote:
Le 30/11/2010 17:10, Frantz Dorsemaine a écrit :



> Pas mieux, je devient fou! Help!

Bon, on va essayer autre chose, puisque apparemment tu ne sais sauver
qu'en MacRoman. Reprends ton fichier de départ, en MacRoman donc, et
on va tenter de gruger l'éditeur de texte... ;-)

Tout d'abord, vérifie que tu retrouves bien le message d'erreur qui dit
« Malformed UTF-8 character (unexpected continuation byte 0x8e, with no
preceding start byte) ». C'est bon ?

Voyons <http://www.miakinen.net/vrac/charsets/?o6=MacRoman∨=6 &pr2>.

Dans la partie droite, on lit :
   MacRoman   é   U+00E9   &#233;   &e acute;   C3 A9

Le caractère é devrait être constitué des octets C3 e t A9 (en UTF-8) au
lieu de l'octet 8E (qui est du MacRoman). Mais les octets C3 et A9,
comme d'ailleurs tous les octets de 80 à FF, correspondent tous à   un
caractère dans MacRoman : C3 = √ et A9 = © !

Du coup, remplace tous les « é » par la séquence  « é », vérifie qu'il
n'existe aucun autre caractère accentué, et sauve le fichier en MacRoman.

Si je ne m'abuse, ton essai devrait être avec le code suivant :
======================== ========================= ======================
#! /usr/bin/perl -w

#use Encode::Unicode;

use utf8;
use Tk;

use strict;
use warnings;

my $wd=MainWindow->new(-width => 400, -height => 200
                         );

my $bt=$wd->Button(-text=>'√©√©√ ©', -command => sub { &Hello

})->place(-x=> 10, -y=> 30);

MainLoop;

sub Hello {
     print "Hellon"}

======================== ========================= ======================

Si jamais ça marche, tu pourras essayer d'ajouter des « è » sous la
forme « √® » ou des « à » sous la f orme « √† ».

Après ça, tu pourras aussi essayer de relire le fichier avec to n éditeur
pour voir s'il comprend enfin que c'est de l'UTF-8 -- ou bien chercher
un autre éditeur de texte plus performant !

Cordialement,
--
Olivier Miakinen



Là tu marque 1 point ;), ca affiche bien des 'é' des 'è' et un 'à'
mais je me voie mal écrire des caractères pareil dans tous mes
scripts.
Il y à t-il un moyen d'y palier? De plus je vais avoir des échang es
avec une base de donnée MySql et là se sera ingérable.
On progresse! Merci
1 2 3 4