Subject: Re: =?windows-1251?Q?=CB=E5_=EF=F7=E8?=
=?windows-1251?Q?_=FA=EF=EE=F7=FD=E5=EB_=F7=E5=F0=F2?=,
=?windows-1251?Q?=EA=E0=EA_=E5?=
=?koi8-r?B?x88gzcHMwNTLwSDWLSk=?=
Проблемы с кодировками
Я делаю email client. Все уже почти готово, все работает, вот только появилась проблема с кодировками. Дело в том что в некоторых письмах, например в title письма программа отображает примерно следующее : =?koi8-r?Q?=F0=D2=C9=D7=C5=D4?=. Но вообщем я решил эту задачу. Но меня интересует, каким образом можно определить в какой кодировке отображен текст... например в memo, чтоб потом программа автоматически перекодировала его (если нужно) из koi в win?
Это моя дипломная работа. Помогите пожалуйста, очень прошу.
Спасибо заранее!
Читай заголовки письма. Там есть header Content-Type, в котором указан charset.
Цитата: Eksell
Дело в том что в некоторых письмах, например в title письма программа отображает примерно следующее : =?koi8-r?Q?=F0=D2=C9=D7=C5=D4?=.
Письма и заголовки могут отправляться в 3-х видах:
- 8 бит
- base64
- quoted-printable
Заголовок может кодироваться самостоятельно, как в приведённом примере. Принцип следующий - =?кодировка?тип?=:
- сигнатура =? говорит о том, что используется кодирование
- потом идёт название кодировки по RFC
- тип кодирования:[LIST]
- Q - quoted printable
- B - base64
Некоторые почтовые системы могут кодировать заголовки из нескольких строк разными кодировками. Бат отрабатывает подобные вольности штатно:
Код:
Закавыка в последней строке. По всей вероятности, почтовый клиент писали "узники оператора IF".
Согласно стандарту, кодированный текст содержит только одну строку и кодировка не может быть рекурсивной (внутри одной кодировки - другая).
Цитата:
=?koi8-r?Q?=F0=D2=C9=D7=C5=D4?=.
Возможно Вы меня не так поняли. С этим делом я уже разобрался (=?koi8-r?Q?=F0=D2=C9=D7=C5=D4?=)...
Мне просто нужно узнать какой кодировкой закодирован текст... например в мемо... чтоб программа сама потом определяла, нужно декодировать или нет... Например, если в мемо выводится следующее:
Код:
чБЫБ ЪБСЧЛБ РПМХЮЕОБ Й ОБРТБЧМЕОБ ЗЙДХ ЧЩВТБООПК чБНЙ
ТХВТЙЛЙ ЛБФБМПЗБ ДМС РТПЧЕТЛЙ Й ЧПЪНПЦОП ОЕПВИПДЙНПЗП
ТЕДБЛФЙТПЧБОЙС ПРЙУБОЙС. ч УМХЮБЕ ТЕЫЕОЙС П ЧЛМАЮЕОЙЙ чБЫЕЗП
ТЕУХТУБ Ч ЛБФБМПЗ Ulitka.RU чБН ВХДЕФ РП ХЛБЪБООПНХ РТЙ ТЕЗЙУФТБГЙЙ
БДТЕУХ ЬМЕЛФТПООПК РПЮФЩ ОБРТБЧМЕОП ХЧЕДПНМЕОЙЕ.
ТХВТЙЛЙ ЛБФБМПЗБ ДМС РТПЧЕТЛЙ Й ЧПЪНПЦОП ОЕПВИПДЙНПЗП
ТЕДБЛФЙТПЧБОЙС ПРЙУБОЙС. ч УМХЮБЕ ТЕЫЕОЙС П ЧЛМАЮЕОЙЙ чБЫЕЗП
ТЕУХТУБ Ч ЛБФБМПЗ Ulitka.RU чБН ВХДЕФ РП ХЛБЪБООПНХ РТЙ ТЕЗЙУФТБГЙЙ
БДТЕУХ ЬМЕЛФТПООПК РПЮФЩ ОБРТБЧМЕОП ХЧЕДПНМЕОЙЕ.
Я так понимаю что это KOI. Как это можно определить программно?
Помогите пожалуйста, это очень важно для меня. Желательно по подробнее.
Буду очень благодарен за помощь!
Посмотри в DRKB (drkb.ru) там есть Статья "Распознавание кодировки", в которой описывается программное определение кодировки с помощью частотного метода.
1. http://yanish.by.ru/projects/nb/xlat.zip - смотреть в коде функцию AutoCode
2. http://www.podgoretsky.com/ftp/Language/nps/ru.delphi.html#N151 - определение методом таблицы модельных распределений.