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

Comment convertir de l'UTF-8 au ISO-8859-1?

4 réponses
Avatar
elho
Bonjour,
J'utilise html::tagparser pour obtenir des mots arabes codé en utf8 (je test avec IsUTF8 pour vérifier), je veux les convertir en ISO-8859-1 (caractères arabes codés par &#NNNN; ou NNNN sont des décimal).
J'ai essayé:
encode('utf8', $string, Encode::FB_HTMLCREF); ça donne de caractères différents de &#NNNN (j'utilise un print simple de perl);

encode('ascii', $string, Encode::FB_HTMLCREF); ça donne des caractères &#NNN qui ne sont pas de l'arabe!

SVP un peu d'aide.

4 réponses

Avatar
Nicolas George
elho wrote in message :
J'utilise html::tagparser pour obtenir des mots arabes codé en utf8 (je test
avec IsUTF8 pour vérifier), je veux les convertir en ISO-8859-1 (caractères
arabes codés par &#NNNN; ou NNNN sont des décimal).



Ça n'a rien à voir avec de l'ISO-8859-1, c'est un codage des caractères type
HTML/XML, qui a lieu au niveau au dessus dans la couche des protocoles.

encode('ascii', $string, Encode::FB_HTMLCREF); ça donne des caractères &#NNN
qui ne sont pas de l'arabe!



Ça devrait marcher, pourtant.
Avatar
Paul Gaborit
À (at) 15 Dec 2008 14:53:03 GMT,
Nicolas George <nicolas$ écrivait (wrote):
elho wrote in message :
J'utilise html::tagparser pour obtenir des mots arabes codé en utf8 (je test
avec IsUTF8 pour vérifier), je veux les convertir en ISO-8859-1 (caractères
arabes codés par &#NNNN; ou NNNN sont des décimal).



Ça n'a rien à voir avec de l'ISO-8859-1, c'est un codage des caractères type
HTML/XML, qui a lieu au niveau au dessus dans la couche des protocoles.



Tout à fait d'accord.

encode('ascii', $string, Encode::FB_HTMLCREF); ça donne des caractères &#NNN
qui ne sont pas de l'arabe!



Ça devrait marcher, pourtant.



En théorie oui. Mais il y a quelques temps (un ou deux ans), j'avais
constaté quelques dysfonctionnements avec Encode::FB_HTMLCREF ou son
pendant XML (qui ont peut-être été corrigés dans les versions récentes
de Perl).

Peut-on voir un bout de code qui ne fonctionne pas et savoir sur
quelle version de Perl ça ne marche pas ?

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Avatar
elho
Paul Gaborit a écrit le 15/12/2008 à 18h37 :
À (at) 15 Dec 2008 14:53:03 GMT,
Nicolas George <nicolas$ écrivait (wrote):
elho wrote in message :
J'utilise html::tagparser pour obtenir des mots arabes codé en utf8
(je test
avec IsUTF8 pour vérifier), je veux les convertir en ISO-8859-1
(caractères
arabes codés par &#NNNN; ou NNNN sont des décimal).




Ça n'a rien à voir avec de l'ISO-8859-1, c'est un codage des
caractères type
HTML/XML, qui a lieu au niveau au dessus dans la couche des protocoles.




Tout à fait d'accord.

encode('ascii', $string, Encode::FB_HTMLCREF); ça donne des
caractères &#NNN
qui ne sont pas de l'arabe!




Ça devrait marcher, pourtant.




En théorie oui. Mais il y a quelques temps (un ou deux ans), j'avais
constaté quelques dysfonctionnements avec Encode::FB_HTMLCREF ou son
pendant XML (qui ont peut-être été corrigés dans les
versions récentes
de Perl).

Peut-on voir un bout de code qui ne fonctionne pas et savoir sur
quelle version de Perl ça ne marche pas ?

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


Votre aide est précieuse, merci. Voici le bout de code qui me tracasse:

use URI::Fetch;
use html::tagparser;
use IsUTF8;

#ici j'obtient le titre d'une page enutilisant HTML::TagParser

$url = "http://localhost/rossoum.html";
my $html = HTML::TagParser->new( $url );
my @list = $html->getElementsByTagName( "title" );
foreach my $elem ( @list )
{
my $tagname = $elem->tagName;
my $attr = $elem->attributes;
my $text = $elem->innerText;
$title = $text;
}

#ici je teste ke c'est du utf-8
print IsUTF8::isUTF8($title);

#ici je change l'encodage
$octets = encode('ascii', $title, Encode::FB_HTMLCREF);
$octets2 = encode('utf-8', $title, Encode::FB_HTMLCREF);
print "title=$titlen"; print "result=$octetsn"; print "result2=$octets2n";

I obtain this:
isutf8=1
title=┘à┘åϬϻ┘èϺϬ Ϻ┘äϼ┘ä┘üÏ® ┘ä┘â┘ä Ϻ┘äϼÏ▓ϺϪÏ▒┘è┘è┘å ┘ê Ϻ┘äÏ╣Ï▒Ï¿
result=&#217;&#133;&#217;&#134;&#216;&#170;&#216;&#175;&#217;&#138;&#216;&#167;&
#216;&#170; &#216;&#167;&#217;&#132;&#216;&#172;&#217;&#132;&#217;&#129;&#216;&#
169; &#217;&#132;&#217;&#131;&#217;&#132; &#216;&#167;&#217;&#132;&#216;&#172;&#
216;&#178;&#216;&#167;&#216;&#166;&#216;&#177;&#217;&#138;&#217;&#138;&#217;&#13
4; &#217;&#136; &#216;&#167;&#217;&#132;&#216;&#185;&#216;&#177;&#216;&#168;
result2=├Ö┬à├Ö┬å├ÿ┬¬├ÿ┬»├Ö┬è├ÿ┬º├ÿ┬¬ ├ÿ┬º├Ö┬ä├ÿ┬¼├Ö┬ä├Ö┬ü├ÿ┬® ├Ö┬ä├Ö┬â├Ö┬ä ├ÿ┬º├Ö
„جزائريين و العرب
Avatar
Nicolas George
elho wrote in message :
$url = "http://localhost/rossoum.html";



Sans pouvoir accéder au document, difficile de tester.

print IsUTF8::isUTF8($title);



Il vaut mieux tester avec utf8::is_utf8, qui teste vraiment la vision que
Perl a de la chaîne.

I obtain this:
isutf8=1
title


C'est tronqué.