我们的应用程序从 Web 表单中获取文本并通过电子邮件将其发送给适当的用户。但是,当有人从 Word 中复制/粘贴臭名昭著的“智能引号”或其他特殊字符时,事情就会变得棘手。
用户输入
他对我说“你好”——这不是很好吗?
但是当消息出现在 Outlook 2003 中时,它会像这样出现:
他和我打招呼不是很好吗?
代码是:
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);
经过一番研究,我认为这可能是一个字符编码问题,并试图将其移至 UTF-8。因此,我因此更新了代码:
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);
这让我更接近,但没有雪茄:
他对我说“你好”——这不是很好吗?
我无法想象这是一个不常见的问题——我错过了什么?