Question

Notre application prend le texte d'un formulaire Web et les envoie par e-mail à un utilisateur approprié. Cependant, quand on copie / colle dans les tristement célèbres « citations intelligentes » ou d'autres caractères spéciaux de Word, les choses deviennent velues.

Les types d'utilisateur dans

  

il a dit « bonjour » me-isnt que Nice?

Mais quand le message apparaît dans Outlook 2003, il sort comme ceci:

  

il dit bonjour à meisnt ce joli?

Le code pour c'était:

Session session = Session.getInstance(props, new MailAuthenticator());
Message msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.setSentDate(new Date());
Transport.send(msg);

Après un peu de recherche, je me suis ce fut probablement un problème de codage de caractères et a tenté de faire avancer les choses en UTF-8. Donc, je mis à jour le code ainsi:

Session session = Session.getInstance(props, new MailAuthenticator());
MimeMessage msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setHeader("X-Mailer", MailSender.class.getName());
msg.addHeader("Content-Type", "text/plain");
msg.addHeader("charset", "UTF-8");
msg.setSentDate(new Date());
Transport.send(msg);

Cela me se rapproche, mais pas de cigare:

  

il a dit  « hello » Mea-isnÂ't que Nice?

Je ne peux pas imaginer c'est un problème rare - qu'ai-je manqué

Était-ce utile?

La solution

est la page avec votre formulaire aussi en UTF-8, ou un jeu de caractères différent? Si vous ne spécifiez pas la page Web charset, le format des données à venir à votre script est je vous laisse deviner.


Edit: le jeu de caractères dans le message doit être défini comme ceci:

msg.addHeader("Content-Type", "text/plain; charset=UTF-8");

depuis charset n'est pas un en-tête séparée, mais une option au contenu de type

Autres conseils

Pourquoi ne remplacez pas les belles citations avec des citations régulières de choix?

Je voudrais vérifier que les données reçues du navigateur est correcte - vider les points de code Unicode et vérifiez contre la MimeMessage.html.setText (texte, charset) méthode peut-être vaut le détour. La documentation sur

IIRC, citations MS Office se trouvent characterset "iso-8859-1".

scroll top