Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
Nicolas George
Frantz Dorsemaine , dans le message
, a
écrit :
Il y à t-il un moyen d'y palier?



Le problème est clairement au niveau de l'éditeur de texte utilisé :
consulter sa doc en profondeur ou en utiliser un autre sont les deux
solutions qui viennent à l'esprit.
Avatar
Frantz Dorsemaine
On 30 nov, 19:14, Nicolas George <nicolas$ wrote:
Frantz Dorsemaine , dans le message
, a
  crit :

> Il y t-il un moyen d'y palier?

Le probl me est clairement au niveau de l' diteur de texte utilis :
consulter sa doc en profondeur ou en utiliser un autre sont les deux
solutions qui viennent l'esprit.



Voila du nouveau !

J'ai une VirtualBox sur ce meme MAC avec windows XP
J'installe les mêmes Perl Komodo PdkPro de chez active state.

Je prend le premier source qui ne marche pas sous MAC avec le use
Encode::Unicode :

#! /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 => su b { &Hello
#
#})->place(-x=> 10, -y=> 30);

my $bt=$wd->Button(-text=>'éèà', -command => sub { &He llo

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



#our $txt="?©?†?®";
our $txt="éèà";

my $En=$wd->Entry(-textvariable=>$txt)->place(-x=> 100, -y=> 30);


Je le test et ca marche. Ensuite après l'avoir enregistrer, je prend
le test.pl que je colle sur mon mac et je test avec perl test.pl et ca
marche
Du coup j'ouvre le test.pl avec le Komodo du MAC et regarde la
différence de caractères spéciaux!

#! /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);

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

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



#our $txt="?©?Ü?Æ";
our $txt="Èˇ";

my $En=$wd->Entry(-textvariable=>$txt)->place(-x=> 100, -y=> 30);


MainLoop;

sub Hello {
print "Hellon"
}

Qu'en pense tu? Un gourou s' impose avec les grisgris???????

Frantz
Avatar
Frantz Dorsemaine
On 30 nov, 19:14, Nicolas George <nicolas$ wrote:
Frantz Dorsemaine , dans le message
, a
  crit :

> Il y t-il un moyen d'y palier?

Le probl me est clairement au niveau de l' diteur de texte utilis :
consulter sa doc en profondeur ou en utiliser un autre sont les deux
solutions qui viennent l'esprit.



Je vais tester avec d'autre IDE Perl notamment Prade et je tien au
courant.
Download en cours.

A++
Avatar
Olivier Miakinen
Le 30/11/2010 18:42, Frantz Dorsemaine a écrit :
On 30 nov, 17:32, Olivier Miakinen <om+ wrote:
[citation intégrale, y compris la signature]





Merci d'élaguer un peu, même quand tu réponds avec G2 (Google groupes)
au lieu de Thunderbird...

Là tu marque 1 point ;), ca affiche bien des 'é' des 'è' et un 'à'



Ah, enfin ! Je commençais à désespérer... bon, ce n'est pas encore
aujourd'hui qu'un problème de charset me résistera. ;-)

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 échanges
avec une base de donnée MySql et là se sera ingérable.



Comme l'écrit Nicolas George : le problème se trouve visiblement dans
l'éditeur de texte et nulle part ailleurs.

Voir là :
http://www.google.fr/search?q=éditeur+de+texte+gérant+UTF-8+sur+Mac+OS+X

--
Olivier Miakinen
Avatar
xavier
Frantz Dorsemaine wrote:

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.



Utilise TextWrangler <http://www.barebones.com/products/textwrangler/>
ou encore mieux, sa version payante, la Rolls des éditeurs de texte,
avec des fonctions d'IDE, BBEdit :
<http://www.barebones.com/products/bbedit/>

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Avatar
Frantz DORSEMAINE
Le 01/12/10 07:22, Xavier a écrit :
Frantz Dorsemaine wrote:

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.



Utilise TextWrangler<http://www.barebones.com/products/textwrangler/>
ou encore mieux, sa version payante, la Rolls des éditeurs de texte,
avec des fonctions d'IDE, BBEdit :
<http://www.barebones.com/products/bbedit/>



Ça à l'air bien mais comment je peux changer le chemin de Perl par
défaut car je n'utilise pas le Prl 5.10 mais dur 5.8.9 situé sous
/usr/local/ActivePerl-5.8

Cordialement Frantz
Avatar
Paul Gaborit
À (at) Tue, 30 Nov 2010 09:42:06 -0800 (PST),
Frantz Dorsemaine écrivait (wrote):
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?



Si vous n'arrivez pas à régler correctement l'encodage de votre script,
le meilleur moyen de s'en sortir consiste à :

1- Ne pas mettre la ligne 'use utf8;' (puisque votre script n'est pas
encodé en utf-8).

2- Ne pas mettre de message destiné à l'utilisateur directement hardcodé
dans le script (donc, n'utiliser que de l'ASCII dans votre script).

3- Créer un fichier de messages dans l'encodage qui vous
souhaitez/pouvez et le faire lire à votre script en déclarant l'encodage
utilisé lors de l'ouverture du fichier.

De plus je vais avoir des échanges avec une base de donnée MySql et là
se sera ingérable. On progresse! Merci



Dans le cas des échanges avec MySQL, c'est via DBI et DBD::mysql (et la
base elle-même) qu'on gère la question du codage. Il n'y a aucun lien
avec l'encodage du script lui-même...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Frantz Dorsemaine
On 1 déc, 11:17, Paul Gaborit wrote:
(at) Tue, 30 Nov 2010 09:42:06 -0800 (PST),
Frantz Dorsemaine crivait (wrote):

> 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?

Si vous n'arrivez pas r gler correctement l'encodage de votre script,
le meilleur moyen de s'en sortir consiste :

1- Ne pas mettre la ligne 'use utf8;' (puisque votre script n'est pas
encod en utf-8).

2- Ne pas mettre de message destin l'utilisateur directement hardcod
dans le script (donc, n'utiliser que de l'ASCII dans votre script).

3- Cr er un fichier de messages dans l'encodage qui vous
souhaitez/pouvez et le faire lire votre script en d clarant l'encodage
utilis lors de l'ouverture du fichier.

> De plus je vais avoir des changes avec une base de donn e MySql et l
> se sera ing rable.  On progresse! Merci

Dans le cas des changes avec MySQL, c'est via DBI et DBD::mysql (et la
base elle-m me) qu'on g re la question du codage. Il n'y a aucun lien
avec l'encodage du script lui-m me...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en fran ais - <http://perl.mines-albi.fr/>

Dans le cas des changes avec MySQL, c'est via DBI et DBD::mysql (et la
base elle-m me) qu'on g re la question du codage. Il n'y a aucun lien
avec l'encodage du script lui-m me...




Sauf si je doit afficher du contenue de la base de donnée qui contient
des caractères accentués saisis par un opérateur dans un Winget Tk
????
Frantz
Avatar
Frantz DORSEMAINE
Le 30/11/10 17:32, Olivier Miakinen a écrit :
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,




Salut Olivier, du nouveau, tu as bon sur toute la ligne. En cherchant
bien j'ai trouvé comment paramétré Komodo par défaut pour être en UTF-8
et comment réencoder les fichiers existants en UTF-8 et là ca marche.
Mais voici un problème de plus, se serai trop facile.
J'utilise DBI pour une base MySql en MAMP en utf8_unicode_ci
Voila le script perl qui fait un update sur une table en insérant les
caratères 'DORSEMAINE xx éèà'. Les caractères 'éèà' ne sont pas visibles
dans la base. D'où ca vient encore ses problèmes d'encodage?

le script :

! /usr/bin/perl -w

use utf8;

use Tk;
use DBI;



my $mw = MainWindow->new();

$mw->Label(-text => 'éèà')->place(-x=> 1, -y => 5);

my $BaseName ="atar";
my $host = "localhost";
$login="fdorsemaine";
$pass="europhi";
my $BaseType="DBI:mysqlPP:$BaseName:host=$host;port306";

our $BaseÛI->connect($BaseType,$login,$pass);

my $rqt=$Base->prepare("UPDATE tb_users SET
nom = 'DORSEMAINE xx éèà'
WHERE id = 3");
$rqt ->execute or die $DBI::errstr;

MainLoop;

Merci
Avatar
Frantz DORSEMAINE
Le 01/12/10 21:18, Frantz DORSEMAINE a écrit :
Le 30/11/10 17:32, Olivier Miakinen a écrit :
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,




Salut Olivier, du nouveau, tu as bon sur toute la ligne. En cherchant
bien j'ai trouvé comment paramétré Komodo par défaut pour être en UTF-8
et comment réencoder les fichiers existants en UTF-8 et là ca marche.
Mais voici un problème de plus, se serai trop facile.
J'utilise DBI pour une base MySql en MAMP en utf8_unicode_ci
Voila le script perl qui fait un update sur une table en insérant les
caratères 'DORSEMAINE xx éèà'. Les caractères 'éèà' ne sont pas visibles
dans la base. D'où ca vient encore ses problèmes d'encodage?

le script :

! /usr/bin/perl -w

use utf8;

use Tk;
use DBI;



my $mw = MainWindow->new();

$mw->Label(-text => 'éèà')->place(-x=> 1, -y => 5);

my $BaseName ="atar";
my $host = "localhost";
$login="fdorsemaine";
$pass="europhi";
my $BaseType="DBI:mysqlPP:$BaseName:host=$host;port306";

our $BaseÛI->connect($BaseType,$login,$pass);

my $rqt=$Base->prepare("UPDATE tb_users SET
nom = 'DORSEMAINE xx éèà'
WHERE id = 3");
$rqt ->execute or die $DBI::errstr;

MainLoop;

Merci


Voila la réponse :

my $test = "DORSEMAINE éèà";
my $octets = encode(utf8, $test, [ CHECK] ) ;

...

my $rqt=$Base->prepare("UPDATE tb_users SET
nom = '$string'
WHERE id = 3");




Merci à tous le monde pour votre aide qui m'a bien sortie de la me....

A bientôt Frantz.
1 2 3 4