Comment décoder du UTF8 si pas de module sur le serveur ? [Perl] - Perl - Programmation
Marsh Posté le 04-04-2004 à 23:43:20
Salut Pospos,
Je suis content que tu me répondes, s'il y en a bien un qui soit capable de déméler les cas les plus complexes, c'est bien toi !
J'utilise (je est un grand mot, c'est mon hébergeur qui installe tout) Perl version 5.6.1
voici les infos données par pg-serveur.pl de perl-gratuit.com (petit programme trés pratique d'ailleurs)
Interpréteur Perl
-----------------------------------------
Version de Perl utilisée ici: 5.006001
/usr/bin/perl existe ? OUI : This is perl, v5.6.1 built for i386-linux
/usr/local/bin/perl existe ? NON
Est-ce que tu as une idée sur ce que je peux faire ?
J'ai essayé de faire des substitutions avec s/// mais ça ne fait rien du tout.
Je précise qu'en mettant :
Code :
|
la page s'affiche à peu prés correctement, mais cela dépend du navigateur utilisé je suppose. Il reste encore des problèmes, notamment pour tous les champs récupérés avec param(), qui sont encodés.
Merci d'avance !
Marsh Posté le 04-04-2004 à 23:47:27
Je copie ici mon script (celui qui utilise l'api google)
L'API google est GoogleSearch.wsdl et je précise que le $encoding ne sert à rien...
Google génère tout en UTF-8, quel que soit la valeur de $encoding.
$userkey, c'est ma clé personnelle, masquée ici bien entendu.
Code :
|
encore merci.
Marsh Posté le 04-04-2004 à 23:53:09
je rajoute encore un élément :
pg-serveur.pl me dit que le module UFT8 est bien installé : chargement OK
en revanche, le module UTF8 :: decode ne semble pas présent.
Code :
|
merci
Marsh Posté le 05-04-2004 à 00:12:29
Oula tu risque d'etre décu pasque l'utf8 c'est pas ma tasse de thé!
c'est koi ton histoire de s///, je comprends pas trop ?
Pour utiliser l'utf8 dans perl 5.6 il faut utiliser le pragama utf8 ("use utf8", avec une portée lexicale), mais ca n'est plus le cas avec perl 5.8 (d'ailleurs il faudra que tu retrouve le POD de la version 5.6 de ce pragma car il a un autre usage dans perl 5.8 il me semble)
Sinon essai le module Unicode::MapUTF8, il a l'air plus efficace pour tes conversion
Et pourkoi tu n'utilise pas le module Net::Google plutot que tout faire à la main avec SOAP::Lite?
dans la doc de Net::Google:
Citation : |
Marsh Posté le 05-04-2004 à 00:13:58
ha ouai t'es chez un hebergeur donc si t'as pas Unicode::MapUTF8 ou Net::Google c'est chiant...
Marsh Posté le 05-04-2004 à 00:40:27
pospos a écrit : |
j'avais essayé un truc du genre $texte =~ s/%C3%A9/é/g sans succés.
Citation : Pour utiliser l'utf8 dans perl 5.6 il faut utiliser le pragama utf8 ("use utf8", avec une portée lexicale), mais ca n'est plus le cas avec perl 5.8 (d'ailleurs il faudra que tu retrouve le POD de la version 5.6 de ce pragma car il a un autre usage dans perl 5.8 il me semble) |
Peut-on se servir de ce module pour convertir de l'UTF-8 ?
Sinon, aucune idée pour résoudre mon problème ?
Merci encore
Nico
Marsh Posté le 05-04-2004 à 09:29:43
Normalement la commande en dessous devrait te suffire
Code :
|
Sinon tu peux utiliser le Unicode::String
Code :
|
Voir même pourquoi pas utiliser le XML::parser
Marsh Posté le 05-04-2004 à 10:29:47
ben ouai Unicode::MapUTF8 ou d'autres mdoules dans le genre comme Unicode::String doivent te permettre de faire la conversion. Mais bon si ils sont pas installés...
(merde j'avais pas vu que tu parlais de Unicode::MapUTF8 dans ton premier message...)
le pragma utf8 fait normalement partie integrante de la distrib officielle de Perl 5.6.1
mais utf8::decode n'est pas un module mais une fonction du pragma utf8 (le tout en minuscules)
Mais le mieux c'est de passer pas Encode::Encoder pour ca.
Normalement il fait partie du core (enfin dans perl 5.8 en tous cas...)
donc essai ca:
Code :
|
Et sinon pourkoi tu utilise pas Net::Google?
Marsh Posté le 05-04-2004 à 11:56:40
Salut,
bah décidément...
le module net::google n'est pas non plus installé sur le serveur... pas plus que encode::encoder.
La réaction de mon hébergeur Globalwebco.net est d'ailleurs trés "commerciale" :
Citation : "Ce que nous pensons en général, c'est que nous n'aimons jamais installer des choses dont un seul client a besoin à cause des besoins d'un logiciel spécifique. Cela nous fait travailler, et cela peut toujours comporter des risques car toute installation comporte des risques (elle peut mal se passer, se faire avec des fichiers corrompus, etc.) et nous évitons cela à tous prix. En général, nous disons aux clients que si un logiciel donné ne fonctionne pas bien ou n'est pas bien programmé ou a des exigences spécifiques auxquelles nous ne pouvons ou ne voulons pas répondre, il appartient aux clients de rechercher un logiciel capable de fonctionner comme il faut, pour ne pas risquer le sort de tous les gens qui sont sur un serveur donné, sinon, nous faisons payer le client car il s'agit de répondre à ses besoins spécifiques. Nous sommes convaincus qu'avec un peu de recherche, vous trouveriez des scripts capables de répondre à votre besoin en toute transparence, sans avoir besoin de nous faire installer ce module sur le serveur ou de payer des frais pour que nous puissions l'installer pour répondre à votre besoin particulier. Google lui-même devrait offrir, nous supposons, des strcutures d'appui capables de vous aider en utilisant leurs propres logiciels, je crois, ou alors vous pourriez reprogrammer votre logiciel pour une interprétation plus efficace du code de l'API de Google." |
En revanche, un ami me dit que je peux installer moi-même des modules en utilisant Lib
comme indiqué ici :
http://www.geekuprising.com/how_ca [...] stall_them
Est-ce que cela est fiable ?
Marsh Posté le 05-04-2004 à 12:26:10
mais ça marche pas ça:
Code :
|
??
Marsh Posté le 05-04-2004 à 15:45:54
Ethan_carter a écrit : |
Oui je l'utilise tous les jours.
Pour installer un module où tu veux :
au moment du perl Makefile.pl faut utiliser PREFIX et LIB
Code :
|
pour utiliser les modules installés de cette manière, tu
peux gérer ça au cas par cas dans les scripts avec
Code :
|
ou positionner la variable d'environnment PERL5LIB
et tous les scripts sauront que des modules se trouvent
ds /home/sniper/prod/mylibs
Code :
|
++
--
David "Sniper" Rigaudiere
Les mongueurs de Perl -- http://www.mongueurs.net
Les journées de Perl 2004 -- http://conferences.mongueurs.net/2004/
Marsh Posté le 19-04-2004 à 02:02:58
Merci pour vos réponses, mais mon hébergeur a fini par accepter d'installer le module Unicode::MapUTF8.
Sinon, pour infos, avec un
$string = pack('C*', unpack('U*', $string));
(pour les cases du formulaire)
et un
print "content-type:text/html; charset=UTF-8\n\n";
(pour le reste)
je m'en sortais à peu prés sans le module.
Encore merci pour tout.
Marsh Posté le 04-04-2004 à 02:45:37
Bonjour,
J'utilise l'API Google et je me sers de la fonction "moteur de recherche".
Il s'agit d'un script permettant d'interroger la base de données de Google de façon transparente.
J'ai développé un script, en perl pour utiliser cet API. Le programme fonctionne bien, mais tout s'affiche en UTF8 en fait, c'est à dire que tous mes caractères avec des accent sont encodés.
Cela est normal en fait : cela vient de l'API google et ça je le sais mais comment résoudre ce problème ?
En PHP il y a le module utf8_decode qui sert à corriger le tir mais là je suis en perl..je sais qu'il existe un module Unicode::MapUTF8 mais il n'est pas installé sur mon serveur.
J'ai bien trouvé un module nommé UTF8.pm mais je ne sais pas comment l'utiliser. J'ai trouvé dans la doc perl des instructions, mais la commande uf8:: decode fait planter mon programme et pourtant j'ai fait un copier/coller de la doc perl officielle...
note : j'ai mis un espace dans uf8 :: decode entre le : et le d ici car sinon le forum prend ça pour un smilley....
Auriez-vous une idée ?
Merci d'avance !
Merci !
Message édité par Ethan_carter le 04-04-2004 à 02:49:14