[R] Gmail Notifier et compatibilité multi langue (utf-8)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[R] Gmail Notifier et compatibilité multi langue (utf-8)

#1

Message par pierrotm777 »

Bonjour à tous,

Je suis sur un nouveau projet, un notificateur de mails dans Gmail.

J'ai trouvé un UDF sur le site Us (Gmail checker) qui fonctionne à merveille.

Mon seul problème, c'est la compatibilité avec les langues comportant certains caractères.

Les é ou è passent bien mai les ' sont remplacés par ' ce qui n'est pas bien lisible.

Pourriez vous m'aider à rendre compatible cet UDF (GMAIL.au3) multilangue ?

Merci par avance.

Je joins l'UDF et un petit exemple.
Pour mieux comprendre,si vous avez un compte gmail, envoyez vous un mail avec dans le titre ou le corps du message:
c'est un premier essai .
Complétez dans l'exemple vos login et password et lancez le script.
Vous devriez obtenir dans le message de l'exemple:
c'est un premier essai
Fichiers joints
GmailNotifier.zip
(1.96 Kio) Téléchargé 106 fois
Modifié en dernier par pierrotm777 le sam. 08 mai 2010 19:03, modifié 2 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Gmail Notifier at compatibilité multi langue (utf-8)

#2

Message par jchd »

Il suffit d'interpréter correctement l'encodage html.

Code : Tout sélectionner

Local $s = 'Unicode html string with some fractional ((2n+1)/8) html codepoints ⅛=1/8 ⅜=3/8 ⅝=5/8 ⅞=7/8'
$s = Execute('"' & StringRegexpReplace($s, "&#(\d+);", '"&chrw($1)&"') & '"')
MsgBox(0, "Html Unicode test", $s & @LF)
 
Attention, il y a aussi les & (perluette & elle-même) et autres.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier at compatibilité multi langue (utf-8)

#3

Message par pierrotm777 »

Merci de votre intérêt pour mon problème.

où dis-je placer ce code svp et comment l'utiliser.

Si je comprend bien , ce code ne résoudrait que le problème avec le ' ?

Après quelques recherches, j'ai trouvé plusieurs fonctions.http://www.autoitscript.com/forum/index ... hl=chinese

Celles ci peuvent-elles m'aider.

Merci
► Afficher le texte
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Gmail Notifier at compatibilité multi langue (utf-8)

#4

Message par jchd »

L'explication est la suivante : html autorise la représentation de tous les caractères Unicode sous une forme portable (comprendre "propriétaire") en encodant la valeur Unicode décimale précédée de &# et suivie de ;
Pour une apostrophe, code hexa 0x27, soit 39 en décimal, cela donne '

Il suffit d'employer une expression régulière (RegExp) pour extraire et remplacer la chose par & ChrW(39) & (concaténé au beau milieu de la chaîne initiale) et d'exécuter le tout.
Partant de "C'est le pied !", on arrive à Execute("C" & ChrW(39) & "est le pied !") et donc à "C'est le pied !"


Maintenant, mon exemple démontre qu'il ne fonctionne pas qu'avec la perluette (il suffirait de l'exécuter pour s'en rendre compte...), mais avec l'intégralité du jeu de charactères Unicode qu'AutoIt peut traiter.

Un mot à ce sujet : AutoIt est censé utiliser Unicode (UTF-16LE) mais en réalité, il n'en est rien : il ne gère actuellement que UCS-2, c'est à dire, grosso modo, que le plan 0 du jeu Unicode, (les caractères Unicode représentables par un seul mot de 16 bits, sans "surrogates"). J'avance petit à petit mes pions pour qu'il passe à un véritable UTF-16LE, mais cela ne se fera pas en un jour, donc que personne ne retienne sa respiration avant de pouvoir traiter l'ensemble des symboles musicaux byzantins avec AutoIt...

Où placer ce bête StringRegExpReplace ? Et bien après réception de la chaîne html et avant traitement ultérieur, pardi !

Oublie les transcodages de/vers UTF8, ils n'ont absolument rien à voir là-dedans.

Edit: argh, j'ai doublonné (cité au lieu d'éditer), mille excuses.

Dernier point : Unicode n'a rien à voir avec les langues !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#5

Message par pierrotm777 »

Merci jchd pour cette explication vraiment claire !

Je vous essayer d'adapter à mon code votre solution et reviendrais vers vous pour vous en dire plus !
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#6

Message par mimione »

Bonjour
Très intéressant.
Tant que vous avez les mains dans le cambouis, serait-il possible (avec éventuellement une option) de lister TOUS les messages présents dans la boîte de réception de Gmail, et pas seulement les "non lus"... ?
Bon courage.
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#7

Message par pierrotm777 »

Pour info, le sujet initial est sur le forum autoit us : http://www.autoitscript.com/forum/index ... pic=111853 , mai ne comporte pas,
enfin je crois la possibilité de lire tous les mails mais juste les non lus.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#8

Message par pierrotm777 »

j'ai essayé cette modif mais ça ne marche pas !

Code : Tout sélectionner

Local $s = 'Unicode html string with some fractional ((2n+1)/8) html codepoints ⅛=1/8 ⅜=3/8 ⅝=5/8 ⅞=7/8'
$s = GetEmailSummary(Execute('"' & StringRegexpReplace($s, "&#(\d+);", '"&chrw($1)&"') & '"'))
MsgBox(0, "Html Unicode test", $s & @LF)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#9

Message par jchd »

Poste un bout de code (court) qui démontre un problème, car comme le dit souvent Thierry, le "ça ne marche pas !" est un peu vague.

Boudiou, je n'avais pas remarqué le GetEmailSummary... késako ce bidule ?

Si, comme son doux nom brichou veut nous le faire croire, cette fonction renvoie une chaîne, c'est ce qu'il faut assigner à $s dans mon exemple.

Code : Tout sélectionner

Local $s = GetEmailSummary(... paramètres que j'ignore ...)
$s = Execute('"' & StringRegexpReplace($s, "&#(\d+);", '"&chrw($1)&"') & '"')
MsgBox(0, "Emails summarizé", $s & @LF)
Peu ou prou.

[private joke]
Donald, y'm'font des trucs pas prévus en MIX !
[/private joke]
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#10

Message par pierrotm777 »

GetEmailSummary permet de récupérer le message lui-même (voir GMAIL.au3) .

Je pensais donc utiliser votre filtre autout de cette commande.

L'exemple du post #1 donne un aperçu du problème avec les ' .
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#11

Message par jchd »

Certes, mais dons pas GetEmailSummary prenant en paramètre la fonction "filtre".

Que donne le dernier exemple, une fois mis en place dans le code ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#12

Message par pierrotm777 »

J'ai essayé comme ci-dessous mais cela me donne la même chose
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gmail Notifier et compatibilité multi langue (utf-8)

#13

Message par pierrotm777 »

Je suis un peu stupide sur ce coup là.

J'avais inversé la place du filtre.

voici ce que je viens d'essayer et qui semble fonctionner avec le ' :

Code : Tout sélectionner

Local $s = 'Unicode html string with some fractional ((2n+1)/8) html codepoints ⅛=1/8 ⅜=3/8 ⅝=5/8 ⅞=7/8'
$s = Execute('"' & StringRegexpReplace(GetEmailSummary($CurrentMessage), "&#(\d+);", '"&chrw($1)&"') & '"')
MsgBox(0, "Html Unicode test", $s & @LF)
Je vais tester avec d'autre langues pour voir si cela fonctionne aussi
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Gmail Notifier et compatibilité multi langue (utf-8)

#14

Message par pierrotm777 »

Bon , j'ai essayé avec de l'allemand qui semble fonctionner bien que je ne le lise pas.

J'ai essayé avec du grec et là ça ne va pas du tout. Il semble que sans le filtre cela fonctionne et plus avec le filtre

Y aurait-il une solution multi langues ?
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Gmail Notifier et compatibilité multi langue (utf-8)

#15

Message par pierrotm777 »

Non ce n'est pas ça.

Pour le grec, cela semble fonctionner avec et sans le filtre !
Idem pour le japonais!
Bizar ...
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Gmail Notifier et compatibilité multi langue (utf-8)

#16

Message par jchd »

Donne un exemple de lignes html qui posent ou pas problème, la solution générique ne doit pas être loin.
Autre question très corollaire, comment affiches-tu le texte Unicode en sortie et avec quelle police ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Gmail Notifier et compatibilité multi langue (utf-8)

#17

Message par pierrotm777 »

Oui , quelle police , si j'ai bien compris il faut une police de caractère compatible unicode . Mais laquelle choisir.

Pour l'instant , j'utilise le plus souvent l'Arial .

Mais laquelle est utilisée par défaut dans autoit. Voilà une bonne question !

Pour l'exemple de page html , je ne sais pas comment la récupérer ni à quelle adresse.

Ce que je sais c'est ce que récupère GMAIL.au3:
► Afficher le texte
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Gmail Notifier et compatibilité multi langue (utf-8)

#18

Message par jchd »

L'écrasante majorité des polices Windows est Unicode, lance charmap pour t'en convaincre. Par contre, l'Arial ne comporte pas de japonais. Charmap montre tout des polices installées.

AutoIt ne fait pas beaucoup de choix, c'est plutôt ton thème qui choisit d'employer telle police pour tel dialogue ou contrôle standard. Depuis AutoIt, il est facile de changer pour tout contrôle la police par défaut.

Bah, la page html tu la récupères dan $Response. N'ayant pas de compte gmail, je suis assez mal pour tester. Masque les infos personnelles et poste-en un bout qui pose souci dans une boîte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre