2009-04-21 4 views
2

У меня проблема с отображением турецких символов в почте, отправленной с кодом 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"); 
+2

Быстрый вопрос. Вы уверены, что проблема в вашем коде, или, возможно, это ваш почтовый клиент, который с трудом показывает это? Вы воспроизвели проблему у разных клиентов? –

+0

Какие персонажи? Можете ли вы показать пример электронной почты? –

ответ

1

Похоже, ISO-8859-9, должны быть в состоянии обрабатывать ваши Turkish letters хорошо. Возможно ли, что текст декодируется в другом месте с неправильной кодировкой символов? Например, если тело письма содержит текст из веб-запроса, в этот момент указывается другое электронное письмо или файл, возможно, неправильный декодер.

Один из способов проверки будут печатать числовое значение точек коды Unicode в String:

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

Если вы видите fffd, то есть «символ замены» и означает, что декодирование используется, когда был создан файл String, который не мог сопоставить байт (или байтовую последовательность) с символом. Если вы видите 3f, это '?' характер, и означает, что текст был поврежден еще дальше.