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

utf8

4 réponses
Avatar
ana
bonjour a tous,

j'ai un texte html utf8 mais codé en dur i.e
" سنوات طويلة"

le browser affiche bien du texte en arabe utf8, pas de probleme ;-)

mais je souhaite faire une recherche sur ce texte d'un mot utf8 "ققق "
acrit en arabe utf8 mais pas codé en &#xxxx;

voila j'ai essaye plusisers methode mais aucune qui marche.
si quelqu'un pourait m'aider ca serait tres cool.

enfin il y'a deus facon de faire:
transformer le texte en vrai arabe
ou
transformer le mot en utf8 code &#xxxx;

mais je ne sais pas comment.

merci d'avance pour vos reponses.

4 réponses

Avatar
Nicolas George
ana wrote in message <46b346bb$0$5069$:
j'ai un texte html utf8 mais codé en dur i.e
" &#1587;&#1606;&#1608;&#1575;&#1578; &#1591;&#1608;&#1610;&#1604;&#1577;"


Corrigeons :

Déjà, l'écriture correcte est « UTF-8 ».

Ensuite, ce que tu montres ici n'est pas du tout de l'UTF-8. C'est une
écriture sous forme d'entités numériques (telles que définies par le SGML ou
le XML). Les numéros écrits sont les codes Unicode des caractères. UTF-8 est
une manière de représenter ces codes sous la forme d'un ou plusieurs octets
chacun. Par exemple, le caractère U+0633 « ARABIC LETTER SEEN », qui en
entité numérique s'écrit « &#1587; » (ou « &#x0633; »), se représente en
UTF-8 par la succession de deux octets 0xD8 0xB3.

le browser affiche bien du texte en arabe utf8, pas de probleme ;-)

mais je souhaite faire une recherche sur ce texte d'un mot utf8 "ققق "
acrit en arabe utf8 mais pas codé en &#xxxx;


Fais lire ton document HTML par une bibliothèque prévue pour lire du HTML ou
du XML (personnellement, j'utilise XML::LibXML, mais il y en a d'autre).
Cette bibliothèque (si elle est bonne) décodera correctement les entités, et
donnera une chaîne de caractères Unicode.

Avatar
Paul Gaborit
À (at) 03 Aug 2007 15:16:11 GMT,
ana écrivait (wrote):
j'ai un texte html utf8 mais codé en dur i.e
" &#1587;&#1606;&#1608;&#1575;&#1578; &#1591;&#1608;&#1610;&#1604;&#1577;"


Que le HTML soit encodé ou non en utf-8 importe peu s'il n'utilise que
des entités (nommées ou, comme ici, numériques).

Si il est effectivement encodé en utf-8, pouquoi y mettre des
entités ? Pourquoi ne pas utiliser directement les caractères utf -8
correspondant ?

Le mieux serait de changer la manière dont ce HTML est génér é.

le browser affiche bien du texte en arabe utf8, pas de probleme ;-)


Encore heureux ! ;-)

mais je souhaite faire une recherche sur ce texte d'un mot utf8 "ق قق "
écrit en arabe utf8 mais pas codé en &#xxxx;


Je n'ai pas réussi à voir votre mot avec la police que j'utilise
actuellement. Mais je vous fais confiance sur le fait que c'est bien
de l'arabe ! ;-)

Gardez ce mot en utf-8. Il est très bien comme ça.

voila j'ai essaye plusisers methode mais aucune qui marche.
si quelqu'un pourait m'aider ca serait tres cool.

enfin il y'a deus facon de faire:
transformer le texte en vrai arabe


C'est la bonne méthode.

ou
transformer le mot en utf8 code &#xxxx;


Non !!!

mais je ne sais pas comment.


(Je pensais que le CHECK Encode::FB_HTMLCREF savait décoder les
entités puisqu'il sait les produire, mais je n'ai pas réussi à   le
faire marcher dans l'autre sens.)

On peut le faire "à la main" en utilisant les expressions
rationnelles. En supposant que $html contient le flot d'octets de
votre text HTML :

(my $text = $html) =~ s/&#(d+);/chr($1)/ge;
# $text contient de vrais caractères en utf-8

Mais pour être sûr de traiter tous les cas (les entités nomm ées en
particulier), il vaut mieux utiliser HTML::Entities :

use HTML::Entities;

my $text = decode_entities($html);
# $text contient de vrais caractères en utf-8

Mais il reste encore un problème : toutes les entités sont alors
décodées même les &gt; et autres &quot;... Ce qui fait que v otre HTML
n'est plus valide. Il ne faudrait donc conserver les entités de base
(&, <, >, ", ') telles quelles mais HTML::Entities ne le permet pas.

Conclusion : pour lire votre HTML, il vaut mieux utiliser un vrai
parser HTML (par exemple HTML::Parser) qui saura extraire uniquement
les noeuds textuels (et non les balises ou attributs) en les
convertissant au passage en utf-8 propre et faire la recherche
uniquement dans ces noeuds textuels !

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

Avatar
ana
bonsoir,

Ah je vous remercie beaucoup pour votre aide,
je m'en suis sortie avec HTML::Entities;

merci aussi pour les explications sur l'UTF-8 ;-)


par contre j'ai decouvert un bug sur mysql,
on ne peut pas inserer 2 colonnes en utf-8
j'etais obliger d'inserer une colonne et de faire un update sur la 2me
colonne.
je vais faire des tests avec un deuxieme exemple et j'enverais un rapport
de bug a mysql

merci a vous encors une fois.
Avatar
Paul Gaborit
À (at) 03 Aug 2007 20:40:58 GMT,
ana écrivait (wrote):
par contre j'ai decouvert un bug sur mysql,
on ne peut pas inserer 2 colonnes en utf-8
j'etais obliger d'inserer une colonne et de faire un update sur la 2me
colonne.
je vais faire des tests avec un deuxieme exemple et j'enverais un rapport
de bug a mysql


Cela m'étonnerait beaucoup que ce bug soit réel !

Faites-vous cela en Perl ? Avec DBI ?

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