我遇到在使用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");
答案 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/
即使使用此代码,您也可以使用土耳其语附件或单个邮件发送。 你可以找到其他土耳其字符集问题,只需在那里搜索。