Java邮件charset ISO-8859-2无法正常工作

时间:2010-01-17 18:13:26

标签: java internationalization javamail iso-8859-2

我遇到了Java Mail API问题。

我可以成功发送邮件,但是一些特殊字符(来自ISO-8859-2语言,如捷克语,斯洛伐克语)不会在邮件中显示。即使在IDE输出中它们也会损坏。

我做错了什么?

Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")

4 个答案:

答案 0 :(得分:2)

我找到了解决方案,使用multipart。这是代码:

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
MimeMultipart multipart = new MimeMultipart();
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
MimeBodyPart tmpBp = new MimeBodyPart();
tmpBp.setContent(message,"text/plain; charset=utf-8");
multipart.addBodyPart(tmpBp);
msg.setContent(multipart);
Transport.send(msg);

答案 1 :(得分:2)

msg.setContent(message,“text / plain; charset = UTF-8”);

而不是你给出的字符集?

答案 2 :(得分:0)

而是将UTF-8用作charset并将IDE控制台配置为使用完全相同的charset。我不知道你正在使用哪个IDE,因为你没有告诉它,但如果它是Eclipse,那么你可以通过 Window >来改变它。 偏好设置> 一般> 工作区> 文本文件编码> 其他> UTF-8

如果这不能解决问题,那么问题出在其他地方。也许您正在使用错误的编码从文件中读取消息。为此,您需要使用InputStreamReader,它将charset作为第二个构造函数参数。

答案 3 :(得分:0)

您应该使用课程setText中的MimeMessage方法,而不是setContent

/**
     * Convenience method that sets the given String as this part's
     * content, with a MIME type of "text/plain" and the specified
     * charset. The given Unicode string will be charset-encoded
     * using the specified charset. The charset is also used to set
     * the "charset" parameter.
     *
     * @param   text    the text content to set
     * @param   charset the charset to use for the text
     * @exception   MessagingException  if an error occurs
     */
    public void setText(String text, String charset)
            throws MessagingException {