Typografische Anführungszeichen in einem Mimemessage zeigt nicht korrekt in Outlook
-
22-08-2019 - |
Frage
Unsere Anwendung nimmt Text von einem Web-Formular und sendet sie per E-Mail an einen geeigneten Benutzer. Wenn jedoch jemand Kopieren / Pasten in den berüchtigten „typografische Anführungszeichen“ oder andere Sonderzeichen aus Word, werden die Dinge haarig.
Der Benutzer gibt in
Er sagt „Hallo“ zu mir ist das nicht schön?
Aber wenn die Nachricht in Outlook 2003 angezeigt wird, kommt es wie folgt aus:
, sagte er hallo, dass nett meisnt?
Der Code für diese war:
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);
Nach einer wenig Recherche, ich dachte, das war wahrscheinlich ein Zeichencodierung Problem und versuchte, Dinge zu UTF-8 zu bewegen. Also, ich den Code thusly aktualisiert:
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);
Das hat mich näher, aber keine Zigarre:
Er sagte  „hello“ zu Mea-isnÂ't schön?
Ich kann mir nicht vorstellen das ein ungewöhnliches Problem ist - was habe ich verpasst
Lösung
Ist die Seite mit dem Formular auch UTF-8, oder eine andere charset? Wenn Sie die Webseite nicht charset angeben, ist das Format der Daten an das Skript kommen reine Vermutung.
Edit: die charset in der Nachricht sollte wie folgt eingestellt werden:
msg.addHeader("Content-Type", "text/plain; charset=UTF-8");
da charset kein separater Header ist, aber eine Option, um Content-type
Andere Tipps
Warum nicht Sie die schönen Zitate mit regelmäßigen prime Anführungszeichen ersetzen?
Ich würde überprüfen, ob die Daten vom Browser empfangen wird, ist korrekt - die Unicode-Codepunkte Dump und überprüfen Sie sie gegen die MimeMessage.html.setText (Text, charset) Methode könnte einen Blick wert sein. Die Dokumentation auf
IIRC, MS Office-Angebote gefunden characterset "iso-8859-1".