Como posso usar o Unicode no protocolo "Mailto"?
Pergunta
Quero iniciar o aplicativo de cliente de e-mail padrão via função Shellexecute.
Ou seja, escrevo algo assim:
Shellexecute (0, 'Mailto: exemplo@example.com?
Como posso codificar caracteres fora dos EUA no assunto e no corpo?
Não posso usar a página de código ANSI padrão, porque os caracteres podem ser qualquer coisa: caracteres chineses, cirílico ou outra coisa.
PS NOTAS:
- Estou usando a função ShelLEXECUTEW.
- Deixar o assunto e o corpo "como está" não funcionará (testado com o Windows Live Mail Client no Win7 e o Outlook Express no WinXP).
- A codificação do assunto como urlencode (UTF8ENCODE (sujeito)) funcionará para o Windows Live Mail, mas não funcionará para o Outlook Express.
- O URLENCODE (UTF8ENCODE (BODY)) não funcionará para ambos os clientes.
Solução
Mailto: exemplo@example.com? Assunto = Exemplo e corpo =%E5%85%AD
A resposta curta é não. Os caracteres devem ser codificados porcentagem conforme definido por RFC 3986 e seus antecessores. RFC 2368 define a estrutura do correio de 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;
}
O corpo neste caso é o caractere CJK U+516D (六) codificado como UTF-8 (E5 85 AD
). Isso funciona corretamente com o Mozilla Thunderbird (pode ser necessário instalar fontes adicionais, se não funcionar).
O resto está de acordo com a forma como o seu agente de usuário (cliente de email) interpreta o URI. O RFC 3986 exige UTF-8, mas as especificações anteriores não. Um agente de usuário pode não interpretar os dados corretamente se ele pré-datas o RFC 3986, não tiver sido atualizado ou estiver mantendo a compatibilidade com versões anteriores com implementações anteriores.
Observação: URLEncode
funções geralmente significam o html application/x-www-form-urlencoded
codificação. Provavelmente, isso fará com que os caracteres espaciais sejam substituídos por personagens Plus.
Nota 2: Não estou atual no estado de IRI Suporte no Windows Shell, mas provavelmente vale a pena investigar. No entanto, alguns personagens da parte da consulta ainda precisam ser codificados porcentagem.
Outras dicas
A interpretação da linha de comando está à altura do programa lançado. Dependendo da natureza do cliente de email instalado, você pode ou não obter o suporte do Unicode (em uma ou outra forma ou formulário diferente). Portanto, não há uma única receita. Alguns deles podem usar a linha de comando ANSI (porque por que não?), Outros podem respeitar os caracteres urlejados, etc.
Sua melhor aposta é detectar 3-4 mala direta ao ler o registro e personalizar sua linha de comando de acordo. Muito deselegante e incompleto por design, mas nada mais que você possa fazer.