Pregunta

Quiero aplicación cliente de correo electrónico predeterminado puesta en marcha a través de la función ShellExecute.

es decir. Escribo algo como esto:

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

¿Cómo puedo codificar los caracteres no estadounidenses en asunto y el cuerpo?

No puedo utilizar la página predeterminada de códigos ANSI, ya que los caracteres pueden ser cualquier cosa:. Caracteres chinos, cirílico o alguna otra cosa

P.S. Notas:

  1. Estoy usando la función ShellExecuteW.
  2. Dejando asunto y el cuerpo "tal cual" no va a funcionar (probado con el cliente de Windows Live Mail en Win7 y Outlook Express en WinXP).
  3. Codificación sujeto como URLEncode (UTF8Encode (Asunto)) trabajará para Windows Live Mail, pero no va a funcionar para Outlook Express.
  4. URLEncode (UTF8Encode (cuerpo)) no funcionará para los clientes.
¿Fue útil?

Solución

  

mailto:? Example@example.com subject = ejemplo & body =% e5% 85% ad

La respuesta corta es no . Caracteres deben ser porcentaje codificados como se define por RFC 3986 y sus predecesores. RFC 2368 define la estructura de la 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;
}

El cuerpo en este caso es el carácter CJK U + 516d (六) codificada como UTF-8 (E5 85 AD). Esto funciona correctamente con Mozilla Thunderbird (puede que tenga que instalar fuentes adicionales si no lo hace).

El resto depende de cómo su agente de usuario (cliente de correo) interpreta la URI. RFC 3986 mandatos UTF-8, pero las especificaciones anteriores no lo hicieron. Un agente de usuario puede fallar para interpretar los datos correctamente si es anterior a RFC 3986, no se ha actualizado o si se mantiene la compatibilidad hacia atrás con implementaciones anteriores.

Nota: Las funciones URLEncode significan generalmente la codificación HTML application/x-www-form-urlencoded. Esto probablemente causa caracteres de espacio para ser sustituido por más caracteres.

Nota 2: No estoy actual en el estado de IRI apoyo en el shell de Windows, pero es probable que vale la pena analizar. Sin embargo, todavía se necesitan algunos caracteres en la parte de consulta para ser codificados por ciento.

Otros consejos

La interpretación de la línea de comandos es hasta el lanzamiento del programa. Dependiendo de la naturaleza del cliente de correo electrónico instalado, que puede o no puede obtener su soporte Unicode (en una u otra forma o forma diferente). Así que no hay una receta única. Algunos de ellos pueden utilizar la línea de comandos ANSI (porque ¿por qué no?), Algunos de ellos pueden respetar caracteres urlencoded, etc.

Su mejor apuesta es detectar 3-4 anuncios publicitarios populares mediante la lectura del registro y personalizar la línea de comandos en consecuencia. Muy poco elegante, e incompleta por diseño, pero nada más que puede hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top