Я пытаюсь обработать некоторые входящие электронные письма, содержащие символы иврита, закодированные в 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
.
Кто-нибудь видел что-нибудь подобное?