2009-04-21 9 views
2

J'ai un problème d'affichage des caractères turcs dans le courrier envoyé avec du code Java. Les caractères sont affichés sous forme de points d'interrogation (?) Dans le courrier.Problème de messagerie Java avec les caractères turcs

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

question rapide. Êtes-vous sûr que le problème est dans votre code, ou peut-être que c'est votre client de messagerie qui a du mal à l'afficher? Avez-vous reproduit le problème chez différents clients? –

+0

Quels personnages? Pouvez-vous montrer un exemple d'email? –

Répondre

1

Il ressemble à ISO-8859-9 doit être capable de gérer votre Turkish letters bien. Est-il possible que le texte soit décodé ailleurs avec le mauvais encodage de caractères? Par exemple, si le corps de l'e-mail contient du texte provenant d'une requête Web, d'un autre e-mail ou d'un fichier, le mauvais décodeur est peut-être spécifié à ce moment-là.

Une façon de vérifier serait d'imprimer la valeur numérique des points de code Unicode dans le String:

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

Si vous voyez fffd, qui est le « caractère de remplacement » et signifie que le décodage utilisé lorsque le String a été créé n'a pas pu mapper un octet (ou une séquence d'octets) à un caractère. Si vous voyez 3f, c'est un '?' caractère, et signifie que le texte a été corrompu encore plus loin.

Questions connexes