Java 邮件字符集 ISO-8859-2 不起作用

Posted

技术标签:

【中文标题】Java 邮件字符集 ISO-8859-2 不起作用【英文标题】:Java mail charset ISO-8859-2 not working 【发布时间】:2010-01-17 18:13:26 【问题描述】:

我在使用 Java Mail API 时遇到问题。

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

我做错了什么?

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

【问题讨论】:

有什么理由不使用commons-email? 【参考方案1】:

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

而不是您提供的字符集?

【讨论】:

【参考方案2】:

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

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);

【讨论】:

【参考方案3】:

宁可使用UTF-8 作为字符集,并将您的IDE 控制台配置为也使用相同的字符集。我不知道你使用的是哪个 IDE,因为你没有告诉它,但如果是 Eclipse,那么你可以通过 Window > Preferences > 常规 > 工作区 > 文本文件编码 > 其他 > UTF-8

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

【讨论】:

我尝试了 UTF-8 奇怪的是,当我手动设置 println (System.out.println("Some text using special chars"); 显示正常时,它在 IDE (NetBeans) 中工作。 ..但我将发送的消息输出到 IDE 并且该输出已损坏:/【参考方案4】:

您应该使用MimeMessage 类中的setText 方法而不是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 

【讨论】:

以上是关于Java 邮件字符集 ISO-8859-2 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Informix JDBC ISO-8859-2 编码问题

为 iso-8859-2 发送正确的字符集标头

我有一个匈牙利文本 ISO-8859-2,我会将文本读入文件但在 Python3 中不起作用 [重复]

Python 中 ISO-8859-2 和 UTF-8 之间的转换

如何在连接字符串中将 Access DB 从 ISO-8859-2 更改为 UTF-8?

python怎么解码ISO-8859-2格式.并转换为utf-8