【问题标题】:Java mail problem with Turkish characters土耳其语字符的 Java 邮件问题
【发布时间】:2010-10-20 20:54:14
【问题描述】:

我在使用 Java 代码发送的邮件中显示土耳其语字符时遇到问题。这些字符在邮件中显示为问号 (?)。

Message msg = new MimeMessage(mailSession);
msg.setHeader("Content-Encoding","ISO-8859-9");
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject,"iso-8859-9");
msg.setSentDate(new Date());
msg.setContent(messageText, "text/html;ISO-8859-9");

【问题讨论】:

  • 快速提问。您确定问题出在您的代码中,还是您的电子邮件客户端难以显示?您是否在不同的客户端重现了该问题?
  • 哪些字符?你能显示一个示例电子邮件吗?

标签: java character-encoding email jakarta-mail turkish


【解决方案1】:

看起来 ISO-8859-9 应该能够处理您的Turkish letters 好吧。文本是否有可能在其他地方使用错误的字符编码进行解码?例如,如果电子邮件的正文包含来自网络请求、另一封电子邮件或文件的文本,则可能此时指定了错误的解码器。

一种检查方法是在String 中打印Unicode 代码点的数值:

for (int idx = 0; idx < str.length(); ++idx) {
  System.out.println(Integer.toHexString(str.charAt(idx)));
}

如果您看到fffd,那是“替换字符”,这意味着创建String 时使用的解码无法将字节(或字节序列)映射到字符。如果您看到3f,那是一个“?”字符,并且意味着文本在更早的时候被破坏了。

【讨论】:

    【解决方案2】:

    您可以在这里找到解决方案:

    http://www.serkankonakci.com/Project/wordpress/2009/02/04/java-mail-ile-mail-gonderme-ornegi/

    即使使用此代码,您也可以使用土耳其语发送附件或单个邮件。 你可以找到其他土耳其字符集问题,在那里搜索。

    【讨论】:

      【解决方案3】:

      使用 UTF-8,下面是编码的一个很好的概述: http://www.joelonsoftware.com/articles/Unicode.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-29
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多