Как сделать так, чтобы TMail не удалял последние буквы писем на иврите?

Я пытаюсь обработать некоторые входящие электронные письма, содержащие символы иврита, закодированные в Windows-1255.

Некоторый пример контента:

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

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

Предмет должен быть "שאלה - ליאור צדוק", но вместо этого "שאלה - ליאור צדו". То есть последний символ отбрасывается. То же самое относится и к имени From.

Я нашел эту проблему в списке Iconv, который описывает ту же проблему. Последнее слово звучит так:

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

Это соответствует документации Ruby Iconv (которую я скопировал в Gist), в которой подчеркивается важность добавление nil в конец ввода.

Нигде в моем коде я не использую Array или блочные версии Iconv; Я всегда использую вспомогательный метод Iconv.iconv, который добавляет nil за вас. Я проверил источник TMail, и он использует тот же помощник Iconv.iconv.

Кто-нибудь видел что-нибудь подобное?


person James A. Rosen    schedule 15.12.2010    source источник


Ответы (1)


Что ж, на самом деле это было проще, чем я думал. Я пытался добавить nil к концам моих вызовов Iconv.iconv безрезультатно. Чего я не пробовал, так это вызова join по результату. Таким образом, окончательный правильный результат

Iconv.iconv(to, from, text_to_transcode, nil).join
person James A. Rosen    schedule 15.12.2010