OVH Cloud OVH Cloud

Jeu caractères Win/mac

18 réponses
Avatar
dcdc2
Bonjour,

J'utilise une macro pour enregistrer automatiquement un lien hypertexte
dans une cellule.
Pour cela je converti certains caractères (espace en %20 par exemple).

Mais j'ai quelques problèmes pour certains caractères spéciaux:
exemple le retour à la ligne "utile et fonctionnel" sous Mac est %0D (13)
tandis qu'il faut %0A (10) sous windows. Y a-t-il un moyen de faire ces
conversions de façon dépendante du système et/ou de savoir sur quel système
on est (et s'adapter)... Car ma macro et mon fichier est utilisé sur Mac et
sur Win !

des idées ?
(sous mac, il arrive carrément parfois que ça plante lamentablement au
moment de créer l' " hyperlink ")


--
dc

8 réponses

1 2
Avatar
Jean-Marc
"dcdc2" a écrit dans le message de
news:

PS/ à l'heure actuelle je n'ai pas essayé encore toutes les façons sous


Mac
puisque je suis essentiellement sous Win... Il me reste en particulier à
essayer la fonction ci-dessus, avec dans la chaîne initiale des vbNewLine.
Mais pour le moment je vois mal comment me passer de la fonction de
convertion.





Hello,

voila, j'ai trouvé ce que dit la norme, c'est la RFC 2822 qui définit le
format des messages Internet:
http://www.faqs.org/rfcs/rfc2822.html

Je cite ici le paragraphe 2.3, qui traîte spécifiquement de la partie Body
(je cite ici exactement la RFC):

----------------------------------------------------------------------------
2.3. Body

The body of a message is simply lines of US-ASCII characters. The
only two limitations on the body are as follows:

- CR and LF MUST only occur together as CRLF; they MUST NOT appear
independently in the body.

----------------------------------------------------------------------------

C'est parafaitement clair ici:
"Les caractères CR et LF DOIVENT seulement apparaître ensemble, en tant
qu'entité <CRLF>.
Ils ne DOIVENT PAS apparaître séparément dans la section BODY."

La question ne se pose donc plus: un saut de ligne = <CRLF>

C'est au client de messagerie de se charger de l'affichage en fonction de
l'OS.

--
Jean-marc
Avatar
dcdc2
Merci beaucoup Jean-Marc c'est une réponse très instructive.
Ceci dit, pour ma fonction, je suis quand même toujours obligé de
l'utiliser
car il faut quand même former l'URL complète avec mailto: et les caractères
comme & au début (dans le sujet par exemple) se doivent d'être remplacés.

pour le saut de ligne, je suis heureux de ne plus avoir à distinguer de
système

qui plus est pour les caractères autres (non ascii) le système s'en sort
plutôt bien pour la conversion et les accents passent particulièrement bien
(tant mieux).
Avatar
Jean-Marc
"dcdc2" a écrit dans le message de
news:
Merci beaucoup Jean-Marc c'est une réponse très instructive.
Ceci dit, pour ma fonction, je suis quand même toujours obligé de
l'utiliser
car il faut quand même former l'URL complète avec mailto: et les


caractères
comme & au début (dans le sujet par exemple) se doivent d'être remplacés.

pour le saut de ligne, je suis heureux de ne plus avoir à distinguer de
système



De ce point de vue la lecture des RFC est souvent tout à fait instructive.
J'essaie d'avoir le réflexe quand je me pose des questions de ce genre.

Je ne me rapellais plus exactement de ce que disait les RFC au sujet du
CRLF, et c'est un sympathiqe contibuteur de fr.comp.mail qui m'a redonné la
référence.

--
Jean-marc
Avatar
dcdc2
En l'occurence, ce n'est pas cette norme strict qui est appliquée, donc la
lecture de la norme est (presque) décorative. En effet, il y a des parties
utiles, puisque toujours employés et des parties caduques car le système
transmet très bien les caractères internationaux... Séparer l'utile de
l'inutile se fait rapidement en faisant quelques essais. Ou en partageant
les expériences (d'où les forums pour demander à ceux qui l'ont déjà fait).

La norme n'est utile que pour un développement plus lourd ou pour sa
culture générale. Pour une petite macro de 20 lignes, lire 5 docs en détail
est idiot. Mon avis est donc plutôt que l'on prend en main cette culture et
ces normes au fil des expériences. Au fil des années.
Avatar
Jean-Marc
"dcdc2" a écrit dans le message de
news:
En l'occurence, ce n'est pas cette norme strict qui est appliquée, donc la
lecture de la norme est (presque) décorative. En effet, il y a des parties
utiles, puisque toujours employés et des parties caduques car le système
transmet très bien les caractères internationaux...



Je ne veux pas polémiquer, mais à mon sens tu te trompes sur ce point. La
RFC 2822 n'est pas caduque. Elle dit si qui est légal et ce qui ne l'est
pas. En particulier elle te garantit que ton message sera transmis et
affiché proprement d'un bout à l'autre de la chaîne si tu emploies des
caractères US ASCII 7 bits. Elle ne dit RIEN sur les autres.

Le petit test suivant prend 5 minutes à faire, et te convaincra que la norme
n'est PAS du tout obsolète.

1/ lance une session dos, et fait un telnet sur le port 25 de ton serveur
SMTP

TELNET relay.skynet.be 25
puis:
EHLO trucmuche
MAIL FROM:
RCPT TO:
DATA
coucou
éèà.
QUIT

Maintenant, va lire ton mail dans ton client mail favori et regarde ce qui
se passe.
Chez moi, je reçois à l'affichage:

coucou
‚Š…


Et c'est normal! j'ai envoyé depuis une console dos un message pour SMTP
avec les caractères éèà, pris dans le jeu de caractères utilisé par ma
console DOS. Ceux ci ont été insérés (sous forme de leur code ASCII étendu
(==> donc non portable)) et je les reçois dans un client windows, qui essaie
d'afficher comme il peut ces caractères plus grands que 127 (ils les traduit
donc pour l'affichage dans sa table à lui). Résultat, il m'affiche un
contenu qui n'est pas ok (à l'affichage).
Avatar
dcdc2
Je ne dis pas que la norme est obsolète, je dis qu'elle n'est pas forcément
la plus utile, du moins pas à elle seule pour profiter des applications
pratiques. Car on ne fait pas un exo pour s'amuser mais une application
pratique, n'est-ce pas ?
Avatar
jean-marc
"dcdc2" wrote in message
news:
Je ne dis pas que la norme est obsolète, je dis qu'elle n'est pas


forcément
la plus utile, du moins pas à elle seule pour profiter des applications
pratiques. Car on ne fait pas un exo pour s'amuser mais une application
pratique, n'est-ce pas ?



Oui bien sur. Et pour que l'application soit "pratique", il faut qu'elle
soit utilisable.
Par extension, utilisable par le plus grand nombre. Les normes sont faites
pour
cela, pour donner un cadre aux implémentations.
Mais bien entendu, chacun est libre de limiter volontairement l'utilisation
d'une
application, pour autant que les limites soient clairement exposées: "Mon
application
suppose que vous utilisez un système qui utilise et affiche les caractères
étendus comme
le jeu de caractères Windows-CP1152".

Voir à ce sujet une très utile table de correspondance, et l'article
associé:
http://openweb.eu.org/articles/jeux_caracteres/
http://worldserver3.oleane.com/tthomas/jeucar.html

--
Jean-marc
Avatar
dcdc2
J'ajoute ici mon expérience concrète après essais sous Win/Mac d'un même
programme
sous l'aspect pratique et l'usage de la méthode :

ActiveWorkbook.FollowHyperlink Address:=T$, AddHistory:úlse
et éventuellement:
... , ExtraInfo:=T2$, Method:=msoMethodGet

on peut utiliser
T="mailto: ?Subject=Toto%20Tata&Body=Début%20du%20message"
qui fonctionne bien.
Ou séparer en deux et ajouter un T2
T=mailto:
et T2="Subject=Toto%20Tata&Body=Début%20du%20message"


La limite à 998 caractères (de la norme) est à respecter. Lorsqu'on le
passe en paramètre Address, windows peut accepter un dépassement, mais pas
sous le paramètre ExtraInfo (là il y a une limite de taille). Sous Mac la
limite s'applique quel que soit l'argument. Sorti de ces cas excel plante !
(pas d'erreur, un plantage). (Conseil : ne pas déboguer mais Annuler le
débogueur sinon excel continue de tourner en tâche de fond.) Donc il vaut
mieux avoir un T = left(T,998) pour éviter un plantage.

Les caractères spéciaux peuvent avoir besoin d'être transformés par leurs
codes ascii ( & ? = % ) qui servent déjà et ont un sens précis dans l'URL.
En e qui concerne les sauts de ligne, n'en déplaise à la norme, mais IL NE
FAUT PAS la respecter et envoyer la chaîne "%0A%0D" (ou l'inverse je ne sais
plus l'ordre entre 13 et 10). Car sous Mac cela ajoute des petits carrés au
début ou à la fin de la ligne sautée.
Cela n'est pas acceptable.
(oui respecter la norme ne fonctionne pas forcément en pratique, désolé !)

j'ai choisi d'insérer la chaîne vbNewLine (constante définie par vba)
suivie d'une séquence:
Spe_char = .Substitute(Spe_char, Chr(13), "%0D")
Spe_char = .Substitute(Spe_char, Chr(10), "%0A")
ainsi le saut de ligne apparaît bien sous les deux OS. (et pas autrement)

Enfin les caractères non ASCII (accents etc...) semblent très bien convertis
et intégrés.
On les retrouve comme voulu dans le client de messagerie ainsi ouvert.

Si quelqu'un a des moyens plus directs ou simples, ses remarques sont
bienvenues.
1 2