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

War es hilfreich?

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".

scroll top