土耳其字符的Java邮件问题

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

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

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

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

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

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

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

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

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