Как я могу использовать Unicode в протоколе «Mailto»?

StackOverflow https://stackoverflow.com/questions/2177370

  •  24-09-2019
  •  | 
  •  

Вопрос

Я хочу запустить клиентское приложение по электронной почте по умолчанию через функцию Shellexecute.

То есть я пишу что-то вроде этого:

Shellexecute (0, 'mailto: example@example.com? Тема = Пример и тело = Пример », ...);

Как я могу кодировать не-американские персонажи в теме и теле?

Я не могу использовать кодовую страницу ANSI по умолчанию, потому что символы могут быть чем угодно: китайские иероглифы, кириллицы или что-то еще.

PS Примечания:

  1. Я использую функцию ShellexecuteW.
  2. Покидая тему и тело «как есть» не будет работать (проверено с Windows Live Mail Client на Win7 и Outlook Express на WinXP).
  3. Кодировка субъекта как URLENCODE (UTF8ENCODE (тема)) будет работать для Windows Live Mail, но не будет работать на Outlook Express.
  4. URLENCODE (UTF8ENCODE (BUTY)) не будет работать для обоих клиентов.
Это было полезно?

Решение

mailto: example@example.com? Тема = пример и тело =% E5% 85% AD

Краткий ответ нет. Отказ Персонажи должны быть процентными, закодированными, как определено RFC 3986. и его предшественники. RFC 2368. Определяет структуру URI Mailto.

#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;
}

Тело в этом случае является символом CJK U + 516D (六), закодированный как UTF-8 (E5 85 AD). Это работает правильно с Mozilla Thunderbird (вам может потребоваться установить дополнительные шрифты, если это не так).

Остальное зависит от того, как ваш пользовательский агент (почтовый клиент) интерпретирует URI. RFC 3986 мандаты UTF-8, но предыдущие спецификации не сделали. Агент пользователя может не использовать данные правильно, если он предварительно даты RFC 3986, не был обновлен или поддерживает обратную совместимость с предыдущими реализациями.

Примечание: URLEncode Функции обычно означают HTML application/x-www-form-urlencoded кодировка. Это, вероятно, приведет к замене пространственских символов плюс символов.

Примечание 2: Я не текущий в состоянии IRI. Поддержка в Windows Shell, но она, вероятно, стоит посмотреть. Тем не менее, некоторые символы в части запроса все равно должны быть в процентах кодированы.

Другие советы

Интерпретация командной строки зависит от запущенной программы. В зависимости от природы установленного клиента электронной почты вы можете или не можете получить поддержку Unicode (в одной или другой другой форме или форме). Так что нет ни одного рецепта. Некоторые из них могут использовать командную строку ANSI (потому что почему нет?), Некоторые из них могут уважать орланкодированные персонажи и т. Д.

Ваша лучшая ставка состоит в том, чтобы обнаружить 3-4 популярных почтовых почтовых, чтение реестра и настройте вашу командную строку соответствующим образом. Очень нерешеный и неполный дизайн, но ничего кроме того, вы можете сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top