Gestion des accent (et les caracteres typiquement francais) en Perl ?? - Programmation
Marsh Posté le 24-09-2001 à 12:41:52
test réalisé en console ms-dos :
print "Donnez un mot AVEC accent : ";
chomp ($_ = <STDIN> );
print;
je récupère bien les accents
[edtdd]--Message édité par Aricoh--[/edtdd]
Marsh Posté le 24-09-2001 à 14:16:22
Effectivement, excuse moi, je vient de realiser que le
probleme ne vient pas de la saisie : j'ai bien mes accents
avec le print imediat.
En fait, une fois que je recopie ma chaine dans le fichier
de sortie (en l'occurence un fichier html) les caracteres
accentues sont remplace par un code (qui visiblement n'est
pas de l'ASCII) :
la chaine "dédé" apparait dans le fichier de sortie sous
la forme "d\202d\202", ce que le navigateur ne comprend pas
et remplace par une virgule.
Comment faire en sorte de generer un "é" plutot que "\202" ??
Merci en tous cas...
Marsh Posté le 24-09-2001 à 18:08:03
Mon probleme se precise, mais reste incomprehensible !!!
Voici le script perl source :
open (OUTPUT, ">test.txt" ); #open test.txt file
print "type ?\n"; #display wait message
chomp($type = <STDIN> ); #get input from keyboard
print "$type\n"; #echo input string on term
print OUTPUT $type; #output string in test.txt file
close (OUTPUT); #close test.txt
Les resultats sont interressants :
le script code le caractere "é", en hexa, 0x82
dans le fichier de sortie.
Ce 0x82 (=130 en decimal) semble correspondre
au <ALT-130> que je tape pour obtenir un "é"
sur le terminal (et d'ailleurs l'echo est correct).
Hors le code ASCII du "é" est le 233... Si je tape
un <ALT-233> lors de la saisie, alors le fichier genere
contient bien un "é", sauf que l'echo sur le terminal est
un "Ú"...........
Enfin, et pour conclure, si je prend un editeur a la
con, type notepad, que je tape un <ALT-130>, j'ai bien
un "é" a l'affichage ainsi que dans mon fichier, le
code hexa 0xE9 (=233) est bien associe a ce
caractere....
HELP !
Quelqu'un capte ce qui se passe ????
D'ou peut venir ce probleme ???
Comment le resoudre / contourner ???
Marsh Posté le 24-09-2001 à 18:14:58
j'l'ai tourne avec des resultats identiques sur
NT4.0 et 2K.
Marsh Posté le 25-09-2001 à 10:15:59
franchement incompréhensible en effet
généralement, la seule sortie où je suis sûr (sous 2000pro et sous Linux) que je conserverai mes accents c'est dans un fichier !
???
Marsh Posté le 25-09-2001 à 10:38:45
slt,
j'ai deja rencontré ce prob. La table ascii pour les valeurs > 127 a changé au courant des années 90. J'ai encore de vieux bouquin qui me donne 'é' = 130, mais aujourd'hui 'é' vaut bien 233. C'est uniquement quand tu utilises le alt+numpad que tu réutilises l'ancienne table ascii (ça doit être une histoire de hardware, les puces interprete é pour 130, enfin un truc du genre je crois).
Si tu utilises le petit prog de Windows 'tables de caractères' (voir accessoires) tu verras que tous les caratères avec accents ont été regroupés et ont une valeur > 191.
Mais ça me parait être un prob un peu différent de celui de départ.
Sur internet :
Pour le passage de param dans une URL il faut coder les caractères spéciaux par %XX, é donne %E9
Pour le texte a afficher é doit être remplacé par é = é
Si ça peut t'aider ....
Marsh Posté le 25-09-2001 à 11:01:26
problème de page de code / unicode sûrement. aux vieux temps du dos, chaque pays partageait les même caractères de 0 à 127 et avait ses caractères spécifiques de 128 à 255. le 130 doit venir de là.
quand l'unicode a standardisé tout ça, le 'é' s'est retrouvé en 233.
et donc dans windows ça a l'air interpreté un peu n'importe comment ... pour le stdin dans perl le plus sûr est de se coller au standard &entity; je pense.
Marsh Posté le 25-09-2001 à 11:07:54
Effectivment, le script tourne correctement pour tous
les caractere < 127, au dela, ce n'est plus coherent.
Ce que je ne m'explique pas, c'est que le notepad a
partir d'un <ALT-130> genere un 233 (ou 0xE9) et que
le terminal MS-DOS (ou Emacs) genere un 130 (ou 0x82).
Le Notepad ferait une converssion/recodage des caracteres
saisis au clavier qu'Emacs ou Ms-Dos ne ferait pas ?!!
Attention, nous parlons tout de meme d'un produit PetitDoux , faudrait pas etre trop elogieux qd meme !!!!
Concernant les pages html, les nouveaux browser savent
directement interpreter les accents donc plus vraiment
la peine de coder en "é"...
J'aimerai eviter de me taper un decodage lettre a lettre
de la chaine pour la stocker dans le fichier....
Quelqu'un aurait un moyen/idee de contourner ce probleme ???
Marsh Posté le 25-09-2001 à 11:11:47
S'cuse youdontcare, nos reponses se sont croisees,
que veux tu dire par se coller au standard &entity; ?
A la lecture de la chaine remplacer tout ce qui resemble
a un caractere special par sa notation en é ?
Marsh Posté le 25-09-2001 à 11:16:08
SebC a écrit a écrit : S'cuse youdontcare, nos reponses se sont croisees, que veux tu dire par se coller au standard &entity; ? A la lecture de la chaine remplacer tout ce qui resemble a un caractere special par sa notation en é ? |
oui. enfin c'est mon point de vue, je fais une fixation sur ce genre de trucs (xml&co) en ce moment
en codant ton texte de cette façon, il est en fait en unicode, donc tu peux traiter des scripts japonais, russes, européens avec la même routine. je suis pas forcément partisan d'encoder ça avec les é, &eagrave; & co, un simple é suffit.
ça implique évidemment de coder tous les caractères > 127, et le '&' en & ou en &.
[edtdd]--Message édité par youdontcare--[/edtdd]
Marsh Posté le 25-09-2001 à 11:21:26
youdontcare a écrit a écrit : ça implique évidemment de coder tous les caractères > 127, et le '&' en & ou & ... son code, me souvient plus. |
Oui, mais Quid du script, il devient specifique au terminal
si je fait un decodage a la main :
130 = é
133 = á
etc...
Le jour ou le script tourne sur un terminal "unicode", la
virgule sera remplacee par un é..... C'est aussi ca qui
me pose probleme.... pourtant si le notepad le fait, il doit
bien y avoir une methode de conversion...........
Marsh Posté le 25-09-2001 à 11:31:26
SebC a écrit a écrit : Oui, mais Quid du script, il devient specifique au terminal si je fait un decodage a la main : 130 = é 133 = á etc... Le jour ou le script tourne sur un terminal "unicode", la virgule sera remplacee par un é..... C'est aussi ca qui me pose probleme.... pourtant si le notepad le fait, il doit bien y avoir une methode de conversion........... |
vi effectivement, je pense trop au web, désolé. il doit tourner sur quel genre de machines ton script ?
si tu es en dos il y a moyen de récupérer des infos sur la page de code (mais me demande pas comment ). après il faudrait convertir chaque page différente en unicode (par exemple) ...
Marsh Posté le 25-09-2001 à 11:48:43
youdontcare a écrit a écrit : vi effectivement, je pense trop au web, désolé. il doit tourner sur quel genre de machines ton script ? si tu es en dos il y a moyen de récupérer des infos sur la page de code (mais me demande pas comment ). après il faudrait convertir chaque page différente en unicode (par exemple) ... |
Oui, ca serait une solution, mais ca devient un peu lourd...
J'vais pas m'eterniser sur ce point, j'vais appliquer
ta methode : convertir au dela de 127 en
&#xxx; et qd les terminaux seront en unicode, je
corrigerai...
Merci a tous de votre aide : Aricoh, minusplus, Barbarella, et youdontcare... merci bcp...
Pour info, le script que je suis en train d'ecrire sert
a generer a partir d'une arborescence une galerie photo
en html avec thumbnails et commentaires... photo numerique
oblige.... si ca vous interresse n'hesitez surtout pas; c'est
avec plaisir que j'vous passerai le code source...
Ceci dit, si une idee lumineuse vous vient, n'hesitez pas
non plus.
Marsh Posté le 24-09-2001 à 11:50:50
J'ai cree un script qui, a un moment donne,
demande une entree au clavier : $var=<STDIN>
Il semble que la chaine recuperee dans $var ne
contienne plus les accents et autres specificites
de notre belle langue francaise.
Comment faire pour forcer Perl a traiter egalement
ces caracteres la; pour manipuler une chaine de
caractere contenant des accents de la meme facon que
les chaines "normales" ???
Bref comment m'y prendre pour recuperer au clavier une
chaine contenant des accents, et pouvoir la reproduire
dans un fichier de sortie ???
Merci de votre aide...