土耳其字符的Java邮件问题

时间:2009-04-21 15:44:14

标签: java character-encoding email javamail turkish

我遇到在使用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");

3 个答案:

答案 0 :(得分:1)

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

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

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

如果看到fffd,那就是“替换字符”,意味着创建String时使用的解码无法将字节(或字节序列)映射到字符。如果你看到3f,那就是'?'字符,意味着文本甚至更远了。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

您可以在此处找到解决方案:

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

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