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

On truc m'échappe

9 réponses
Avatar
Frd
Bonjour,

sur Windows XP, j'ai un petit programme C++ qui me permet de renseigner
quelques champs, qui met à jour une base de données Access et qui doit
envoyer ensuite un mail à l'adresse saisie.
En gros il y a ça :

static CString g_csMailSubject = "?subject=Mon sujet";
static CString g_csMailDebutBody = "&body=";

static CString g_csMailBody = "bonjour, patati patata...%0a";
static CString g_csMailBody2 = _T("Voici nanani nanana ");
static CString g_csMailFin = _T("%0aJe me tiens à votre disposition.%0a");

static CString g_csEmail = "uneadresse@mail.qqchose";

static CString g_csCmdMailto = _T(" ");

void SendMail(CString cle)
{
g_csCmdMailto = _T("mailto:")+g_csEmail+
g_csMailSubject+g_csMailDebutBody+g_csMailBody+
g_csMailBody2+g_csMailFin;

HINSTANCE err = ShellExecute ( NULL, _T("open"), _T("thunderbird"),
g_csCmdMailto, NULL, SW_SHOWNORMAL);

}

Curieusement, la CString g_csCmdMailto contient tout mon texte, mais à
l'arrivée le texte du mail ne contient plus le "à"... ce qui donne
"Je me tiens votre disposition".
Le "à" disparaît quelque soit l'endroit où il est situé dans la chaîne
en fait.

Je n'ai pas utilisé ça avec d'autres courrielleurs et j'ai essayé de
changer les paramètres d'encodage de Thunderbird, sans succès.

Toute idée sera la bienvenue,

merci d'avance

XPost et suivi sur fr.comp.mail

--
Fred
Envoyé depuis ma Gameboy

9 réponses

Avatar
Sergio
Le 23/04/2014 17:02, Frd a écrit :
Bonjour,

static CString g_csCmdMailto = _T(" ");

void SendMail(CString cle)
{
g_csCmdMailto = _T("mailto:")+g_csEmail+
g_csMailSubject+g_csMailDebutBody+g_csMailBody+
g_csMailBody2+g_csMailFin;

HINSTANCE err = ShellExecute ( NULL, _T("open"), _T("thunderbird"),
g_csCmdMailto, NULL, SW_SHOWNORMAL);

}

Curieusement, la CString g_csCmdMailto contient tout mon texte, mais à
l'arrivée le texte du mail ne contient plus le "à"... ce qui donne
"Je me tiens votre disposition".
Le "à" disparaît quelque soit l'endroit où il est situé dans la chaîne
en fait.



Sûrement un problème d'encodage :
- En quoi est encodée ta chaîne dans ton source ? (ISO-8859, UTF-8...)
- En quoi le compilateur va l'encoder dans l'exécutable ?
- Il faut alors ajouter un champs dans le mail spécifiant cet encodage.

Je n'ai pas utilisé ça avec d'autres courrielleurs et j'ai essayé de
changer les paramètres d'encodage de Thunderbird, sans succès.




--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
Bertrand Usse
Frd a écrit :
[...]

Le "à" disparaît quelque soit l'endroit où il est situé dans la
chaîne en fait.



Le codage du caractère ne correspond probablement pas à ce qui est
annoncé dans la conception du mail ou le mail conçu ne précise tout
simplement pas de codage du tout.

Je n'ai pas utilisé ça avec d'autres courrielleurs et j'ai essayé de
changer les paramètres d'encodage de Thunderbird, sans succès.



Il est aussi possible de coder ponctuellement des caractères en base64
mais ça peut devenir assez lourd en fonction de la fréquence
d'apparition des caractères à coder.

Toute idée sera la bienvenue,



Mots clefs de recherche : content-type, charset, mime, etc.

--
Bertrand Usse
Avatar
Frd
Le 23/04/2014 17:31, Sergio a écrit :
Le 23/04/2014 17:02, Frd a écrit :
Bonjour,



Sûrement un problème d'encodage :
- En quoi est encodée ta chaîne dans ton source ? (ISO-8859, UTF-8...)



En ISO-8859-1 sans doute...

- En quoi le compilateur va l'encoder dans l'exécutable ?



Aucune idée, c'est un programme fait avec Visual 6 et j'ai pas trouvé
d'option.

- Il faut alors ajouter un champs dans le mail spécifiant cet encodage.



Genre dans la commande mailto à coté de "subjet=" et "&body=" ?

--
Fred
Avatar
Frd
Le 23/04/2014 19:06, Bertrand Usse a écrit :
Frd a écrit :
[...]

Le "à" disparaît quelque soit l'endroit où il est situé dans la
chaîne en fait.



Le codage du caractère ne correspond probablement pas à ce qui est
annoncé dans la conception du mail ou le mail conçu ne précise tout
simplement pas de codage du tout.



Curieux que les autres caractères accentués passent bien eux.

Je n'ai pas utilisé ça avec d'autres courrielleurs et j'ai essayé de
changer les paramètres d'encodage de Thunderbird, sans succès.



Il est aussi possible de coder ponctuellement des caractères en base64
mais ça peut devenir assez lourd en fonction de la fréquence
d'apparition des caractères à coder.



J'ai un seul "à" dans ce mail !

Toute idée sera la bienvenue,



Mots clefs de recherche : content-type, charset, mime, etc.



Yes...
Avatar
Antoine Leca
Frd écrivit :
envoyer ensuite un mail à l'adresse saisie.


<...>
static CString g_csMailFin = _T("%0aJe me tiens à votre disposition.%0a");

static CString g_csEmail = "";

static CString g_csCmdMailto = _T(" ");

void SendMail(CString cle)
{
g_csCmdMailto = _T("mailto:")+g_csEmail+
g_csMailSubject+g_csMailDebutBody+g_csMailBody+
g_csMailBody2+g_csMailFin;

HINSTANCE err = ShellExecute ( NULL, _T("open"), _T("thunderbird"),
g_csCmdMailto, NULL, SW_SHOWNORMAL);

Curieusement, la CString g_csCmdMailto contient tout mon texte, mais à
l'arrivée le texte du mail ne contient plus le "à"...



Tu encodes les sauts de ligne, en mettant %0a : c'est très bien
(0A est le code pour le pseudo-caractère «newline»)
Mais tu dois en faire autant pour les lettres accentués (et aussi pour
le caractère % lui-même, %25, et d'autres comme &,%26 ou =, %3d).

Là où cela commence à être un peu plus compliqué, c'est quand il faut
décider quel codage employé pour à. En gros, il y a deux choix
possibles: iso-8859-15 (celui que tu emploies pour le message où je
répond), où il faut utiliser %e0; ou bien utf-8 (autrement dit Unicode,
un code qui permet d'écrire dans toutes les langues et qui est donc le
codage utilisé en interne par Thunderbird), où il faut utiliser %c3%a0.


Antoine

P.S.: utilise _T() partout, ou nulle part, sinon tu auras des surprises
le jour où tu utiliseras UNICODE/_UNICODE...
Avatar
Antoine Leca
Frd écrivit :
Le 23/04/2014 19:06, Bertrand Usse a écrit :
Frd a écrit :
Le "à" disparaît quelque soit l'endroit où il est situé dans la
chaîne en fait.



Le codage du caractère ne correspond probablement pas à ce qui est
annoncé [...]



Curieux que les autres caractères accentués passent bien eux.



Une information qui n'est pas totalement inutile de donner au départ...

Une explication dans ce cas pourrait être que «à» est encodé (en utf-8)
C3,A0 et que le A0 est «mangé» par une couche intermédiaire qui le
confond avec un caractère d'espacement.


Antoine
Avatar
Frd
Le 25/04/2014 11:09, Antoine Leca a écrit :
Frd écrivit :
envoyer ensuite un mail à l'adresse saisie.


<...>
static CString g_csMailFin = _T("%0aJe me tiens à votre disposition.%0a");

static CString g_csEmail = "";

static CString g_csCmdMailto = _T(" ");

void SendMail(CString cle)
{
g_csCmdMailto = _T("mailto:")+g_csEmail+
g_csMailSubject+g_csMailDebutBody+g_csMailBody+
g_csMailBody2+g_csMailFin;

HINSTANCE err = ShellExecute ( NULL, _T("open"), _T("thunderbird"),
g_csCmdMailto, NULL, SW_SHOWNORMAL);

Curieusement, la CString g_csCmdMailto contient tout mon texte, mais à
l'arrivée le texte du mail ne contient plus le "à"...



Tu encodes les sauts de ligne, en mettant %0a : c'est très bien
(0A est le code pour le pseudo-caractère «newline»)
Mais tu dois en faire autant pour les lettres accentués (et aussi pour
le caractère % lui-même, %25, et d'autres comme &,%26 ou =, %3d).

Là où cela commence à être un peu plus compliqué, c'est quand il faut
décider quel codage employé pour à. En gros, il y a deux choix
possibles: iso-8859-15 (celui que tu emploies pour le message où je
répond), où il faut utiliser %e0; ou bien utf-8 (autrement dit Unicode,
un code qui permet d'écrire dans toutes les langues et qui est donc le
codage utilisé en interne par Thunderbird), où il faut utiliser %c3%a0.



Merci bien pour ces pistes, que je testerai dès que possible

Antoine

P.S.: utilise _T() partout, ou nulle part, sinon tu auras des surprises
le jour où tu utiliseras UNICODE/_UNICODE...



Et merci pour tes conseils.

--
Fred
Avatar
Frd
Le 25/04/2014 11:09, Antoine Leca a écrit :

Bonjour

Là où cela commence à être un peu plus compliqué, c'est quand il faut
décider quel codage employé pour à. En gros, il y a deux choix
possibles: iso-8859-15 (celui que tu emploies pour le message où je
répond), où il faut utiliser %e0; ou bien utf-8 (autrement dit Unicode,
un code qui permet d'écrire dans toutes les langues et qui est donc le
codage utilisé en interne par Thunderbird), où il faut utiliser %c3%a0.




au fait...
ça marche :)
C'est bien le %c3%a0 qui fonctionne.
J'ignore pourquoi les autres caractères accentués passent, mais voilà.

P.S.: utilise _T() partout, ou nulle part, sinon tu auras des surprises
le jour où tu utiliseras UNICODE/_UNICODE...



Fait.

Merci.
Avatar
Olivier Miakinen
Le 12/05/2014 17:08, Frd a écrit :

au fait...
ça marche :)
C'est bien le %c3%a0 qui fonctionne.
J'ignore pourquoi les autres caractères accentués passent, mais voilà.



L'explication proposée Antoine Leca m'avait parue logique :

<news:ljd92m$q0a$
Une explication dans ce cas pourrait être que «à» est encodé (en utf-8)
C3,A0 et que le A0 est «mangé» par une couche intermédiaire qui le
confond avec un caractère d'espacement.
</>

En fait j'avais pensé la même chose, mais je n'avais pas pris la peine
de l'écrire puisque Antoine l'avait fait avant moi.