Смена кодировки при получении сообщений с почтового сервера! - PullRequest
1 голос
/ 07 апреля 2011

Я сейчас создаю небольшой почтовый клиент и сталкиваюсь с проблемой с кодировкой.Я использую компонент TIdIMAP4 indy для получения данных с почтового сервера.Когда я пытаюсь получить почтовые тела, буквы-акценты, такие как ä, ü и т. Д., Преобразуются в = E4, = FC соответственно, так как он использует кодировку ISO-8859-1.

Content-Type: text /равнина;charset = "ISO-8859-1" Content-Transfer-Encoding: quoted-printable

Как я могу заставить сервер отправлять мне данные в другой кодировке, например utf-8?Как лучше всего решить эту проблему?

Заранее спасибо!

1 Ответ

5 голосов
/ 07 апреля 2011

Это не charset, который создает строки типа =E4 и =FC, а Content-Transfer-Encoding.$E4 и $FC - это двоичные представления ä и ü в ISO-8859-1, но они являются 8-битными значениями.Электронная почта по-прежнему в значительной степени является 7-битной средой.Если и клиенты, и серверы не согласовывают 8-битные передачи во время обмена данными, байтовые октеты выше $7F должны кодироваться 7-битным совместимым образом для безопасной передачи через шлюзы электронной почты, особенно устаревшие, которые все еще существуют.quoted-printable - это широко используемая 7-разрядная байтовая кодировка в электронной почте для текстового содержимого.base64 еще один, но он не читается человеком, поэтому он, как правило, используется для двоичных данных вместо текстовых данных (хотя его можно использовать для текста).

В любом случае вы не можете сделатьсервер доставляет вам данные электронной почты в другой кодировке.Сервер просто доставляет исходные данные электронной почты в том виде, в котором они были отправлены отправителем.Если вам нужны данные в формате UTF-8, то вам необходимо перекодировать их самостоятельно после загрузки.Indy будет обрабатывать декодирование для вас.

...