Domanda

Voglio applicazione client di posta elettronica predefinito lancio tramite la funzione ShellExecute.

vale a dire. Mi scrivere qualcosa di simile:

ShellExecute (0, 'mailto:? Subject = example@example.com esempio & body = esempio', ...);

Come faccio a codificare i caratteri non-statunitensi in oggetto e il corpo?

Non posso usare tabella codici ANSI predefinita, perché i personaggi possono essere qualsiasi cosa:. Caratteri cinesi, cirillici o qualcos'altro

P.S. Note:

  1. Sto usando la funzione ShellExecuteW.
  2. Lasciando oggetto e il corpo "come è" non funzionerà (testato con client Windows Live Mail su Win7 e Outlook Express su WinXP).
  3. Codifica soggetto come URLEncode (UTF8Encode (Salvo)) lavorerà per Windows Live Mail, ma non funzionerà per Outlook Express.
  4. URLEncode (UTF8Encode (corpo)) non funzionerà sia per i clienti.
È stato utile?

Soluzione

  

mailto:? Subject = example@example.com esempio & body =% e5% 85% ad

La risposta breve è non . Caratteri devono essere percentuale codificato come definito dalla RFC 3986 e suoi predecessori. RFC 2368 definisce la struttura del mailto URI.

#include "windows.h"

int main() {
  ShellExecute(0, TEXT("open"),
    TEXT("mailto:example@example.com?subject=example&body=%e5%85%ad"),
    TEXT(""), NULL, SW_SHOWNORMAL);

  return 0;
}

Il corpo in questo caso è il carattere CJK U + 516D (六) codificato come UTF-8 (E5 85 AD). Questo funziona correttamente con Mozilla Thunderbird (potrebbe essere necessario installare i font aggiuntivi se non lo fa).

Il resto dipende da come il vostro user-agent (client di posta) interpreta l'URI. RFC 3986 mandati UTF-8, ma le specifiche precedenti non hanno fatto. Un user-agent potrebbe non riuscire a interpretare correttamente i dati se pre-date RFC 3986, non è stato aggiornato o sia mantenendo la compatibilità all'indietro con le implementazioni precedenti.

Nota: Le funzioni URLEncode generalmente significano la codifica application/x-www-form-urlencoded HTML. Questo sarà probabilmente causa caratteri di spazio per essere sostituito da più caratteri.

Nota 2: Io non sono aggiornati sullo stato di IRI supporto nella shell di Windows, ma probabilmente merita di essere esaminata. Tuttavia, alcuni caratteri nella parte di query sarà ancora bisogno di essere codificato per cento.

Altri suggerimenti

L'interpretazione della riga di comando è al programma lanciato. A seconda della natura del client di posta elettronica installato, si può o non può ottenere il supporto Unicode (in una o un'altra forma o forma diversa). Quindi non c'è nessuna singola ricetta. Alcuni di loro possono usare la linea di comando ANSI (perché perché no?), Alcuni di essi possono rispettare caratteri urlencoded, ecc.

La cosa migliore è quella di rilevare 3-4 programmi di posta popolari leggendo il Registro di sistema e personalizzare la linea di comando di conseguenza. Molto poco elegante, e incomplete in base alla progettazione, ma niente altro si può fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top