2010-12-15 76 views
1

J'essaie de traiter certains courriels entrants qui contiennent des caractères hébreux encodés dans Windows-1255.Comment empêcher TMail de laisser tomber les dernières lettres des courriels hébreux?

Quelques exemples de contenu:

From: =?windows-1255... 
Subject: =?windows-1255... 
... 

--Boundary_(ID_/GX/qGlPt4gpL8Dqc2zQQg) 
Content-type: text/plain; charset="windows-1255" 
Content-transfer-encoding: quoted-printable 
... 

Le sujet est censé être "שאלה - ליאור צדוק", mais est plutôt "שאלה - ליאור צדו". Autrement dit, le dernier caractère est abandonné. La même chose est vraie du nom From.

J'ai trouvé this issue sur la liste Iconv, qui décrit le même problème. Le dernier mot est la suivante:

In the original code snippet, there's a call to 
    iconv(the_iconv, NULL, NULL, &utf8, &bytes_written); 
missing at the end. 

Ce jives avec la documentation Ruby Iconv (que j'ai copied to this Gist), qui met l'accent sur l'importance d'ajouter nil à la fin de l'entrée.

Je n'utilise nulle part dans mon code les Array ou les versions de Block d'Iconv; J'utilise toujours la méthode d'assistance Iconv.iconv, qui ajoute le nil pour vous. J'ai vérifié la source TMail et utilise la même aide Iconv.iconv.

Quelqu'un at-il déjà vu quelque chose comme ça?

Répondre

2

Eh bien, c'était en fait plus facile que je ne le pensais. J'avais essayé d'ajouter nil à la fin de mes appels Iconv.iconv en vain. Ce que je n'avais pas essayé appelait join sur le résultat. Ainsi, le résultat final correct est

Iconv.iconv(to, from, text_to_transcode, nil).join