|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() el haj hassen Inscription : février 2011 Messages : 6 ![]() |
Bonjour
j'ai travaillé avec Java Mail 1.2 et j'ai eu un problème quand le nom de fichier en attachement avec mail était en langue arabe. Exemple: le nom de fichier:جدول إستلام فيتامينات لفائدة جدّافي النخبة الوطنية.docx System.out.println("FILE NAME " +part.getFileName()); retourne: FILE NAME =?windows-1256?B?zM/m4SDF08rhx+Mg3e3Kx+Pt5MfKIOHdx8bPySDMz/jH3e0gx+Hkzg==?= =?windows-1256?B?yMkgx+Hm2OTtyS5kb2N4?= Merci beaucoup pour votre aide.
|
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 851 ![]() |
En spécifiant l'encodage (UTF-8, ...) ?
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 093 ![]() |
En lisant la JavaDoc de MimeBodyPart.getFileName(), on comprend un peu mieux ce qu'il en est.
En gros, il est clair dans ton exemple que le nom de fichier est encodé. En principe, le protocole mail interdit d'encoder les fichiers comme ça, mais en réalité tout le monde le fait quand même, parce que c'est la seule manière d'insérer des caractères non-ASCII. (Sans ça, pas d'accent, pas d'arabe dans les noms de fichier.) Par défaut, JavaMail respecte le protocole mail, donc il ne décode pas et tu obtiens ça. Il faut pousser JavaMail à décoder les noms de fichiers. Pour ça, deux possibilités : #1 - Celle indiquée dans la JavaDoc : Régler la propriété système mail.mime.decodefilename à true. Par défaut elle est à false. #2 - Appeler toi-même le décodage. Après avoir obtenu le nom du fichier, le passer dans MimeUtility.decodeText(). Nan ce genre de choses sont censées être gérées automatiquement, et donc il n'y a pas moyen de spécifier un encodage soi-même. Et de plus, le charset utilisé ici est windows-1256, pas utf-8. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() el haj hassen Inscription : février 2011 Messages : 6 ![]() |
j'ai réussi à trouver cette solution:
String decoded = MimeUtility.decodeText(part.getFileName()); System.out.println(Normalizer.normalize(decoded, Normalizer.Form.NFC)); Merci encore une fois.
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 093 ![]() |
Je suis curieux... Pourquoi faire une normalisation NFC ?
C'est sans doute pas une mauvaise idée sur des échanges de texte arbitraire, comme un nom de fichier envoyé par mail. Mais je me demande d'où t'est venue cette idée. Surtout que dans l'exemple donné, la normalisation ne change rien du tout. Ça arrive souvent, en arabe, qu'une normalisation NFC fasse une différence ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com