У меня проблема, аналогичная описанной в этом вопросе : я использую протокол "mailto" для открытия почтового клиента по умолчанию из Java (сейчас я привязан к Java 5, так что, к сожалению, я невозможно использовать Desktop API ).
Некоторые электронные письма содержат текст на японском языке. Строки уже кодируются в UTF-8 следующим образом:
private void email(String to, String subject, String body)
{
String encodedSubject = URLEncoder.encode(subject, "UTF-8");
String encodedBody = URLEncoder.encode(body, "UTF-8");
String mailto = "mailto:" + to + "?subject=" + encodedSubject +
"&body=" + encodedBody;
String cmd = "cmd.exe /c start \"\" \"" + mailto + "\"";
Runtime.getRuntime().exec(cmd);
}
Японские символы правильно кодируются в свои URL-эквиваленты, поэтому, например, «平» становится «% E5% B9% B3»; тем не менее, когда Outlook открывает новое почтовое окно, трехбайтовый символ интерпретируется как три различных символа, поэтому «% E5% B9% B3» интерпретируется как «å¹³».
Я вполне убежден, что проблема заключается в outlook, поскольку следующий фрагмент HTML-кода дает тот же эффект (похоже, SO не позволяет mailto внутри тегов, поэтому я не могу предоставить ссылку напрямую, извините):
<html>
<body>
<a href="mailto:foo@bar.com?subject=%E5%b9%B3">click me to test!</a>
</body>
</html>
Короче говоря, как я могу убедить Outlook правильно интерпретировать многобайтовые символы, когда они приходят по ссылке mailto?
РЕДАКТИРОВАТЬ: Чтобы ответить на вопрос Йоханнеса: у нас есть приложение Java, которое отправляет электронную почту при выполнении определенных действий. Стандартный текст для каждого письма извлекается из комплектов ресурсов, и в большинстве случаев мы без проблем используем JavaMail API; но в этом случае требуется, чтобы пользователь мог настроить электронную почту перед отправкой.
Если кто-то может предложить не cmd.exe
способ создания того же эффекта (новое почтовое окно с предварительно заполненной темой и телом) и с учетом того, что мы привязаны к Java 5, поэтому Desktop API, к сожалению, не вариант - я был бы очень рад!