Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите конвернтнуть UTF8 в Win1251


Layner ©   (2008-04-09 09:11:00) 

Есть строка "=?utf-8?Q?=D0=A0=D0=B0=D0=BD=D0=B6=", это название файла вложения в теле письма.. надо его конвернуть в удобочитаемый вид, а файл точно по русски обзывается. Пробовал Utf8ToAnsi, но после нее надо еще ф-ю преобразования в 1251? Подскажите плз. :(


Сергей М.   (2008-04-09 15:40:00) [1]

В кач-ве иллюстрации:

..
 re: TRegExpr;
 dqp: TIdDecoderQuotedPrintable;
 s: String;
..

 s := '=?utf-8?Q?=D0=A0=D0=B0=D0=BD=D0=B6=';
 re.Expression := '^=\?(\S+?)\?(\S+?)\?(.*)';
 if re.Exec(s) then begin
   showmessage(re.Match[1]); //utf-8
   showmessage(re.Match[2]); //Q
   showmessage(re.Match[3]); //=D0=A0=D0=B0=D0=BD=D0=B6=
   showmessage(utf8toansi(dqp.DecodeString(re.Match[3])));
   end;


Anatoly Podgoretsky   (2008-04-09 15:31:00) [2]

Здесь на самом деле две транспортных "кодировки"/"упаковки".
И формат заголовка
Надо сначала удалить заголовок, потом перекодировать по второй транспортной кодировке, это второй элемент, затем по первой в Юникод, и только потом можешь перекодировать из Юникода в 1251
Многие сетевые библиотеки содержат готовые функции для этого.


Dmitrij   (2008-04-09 12:05:00) [3]

Почти готовый алгоритм разбора есть в библиотеке Indy файл idCoderHeader.pas
функция DecodeHearder (или EncodeHeader точно не помню)
http://indyproject.org/Sockets/index.EN.aspx


Layner   (2008-04-09 10:27:00) [4]

Спасибо всем! ;)
Блин сложно то как все :(((


han_malign   (2008-04-09 10:18:00) [5]

=?utf-8? Q?=D0=A0=D0=B0=D0=BD=D0=B6=?=

RFC-2047
  encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

Q - означает Quoted printable, также может быть B - Base64(RFC-2045)
для Quoted printable, в данном случае
=XX - шестнадцатиричный код октета, '_' - пробел, остальные символы как есть
например
     =?Windows-1251?q?this=20is=20some_=F2=E5=EA=F1=F2?=
это
     'this is some текст'


Reindeer Moss Eater   (2008-04-09 10:05:00) [6]

Q? - опускай
все  _ переводи в пробел.
все =B0 переводи в #strtoint($B0)
последний = опускай

после чего получишь utf8


clickmaker   (2008-04-09 09:52:00) [7]

это похоже на бинарное представление, т.е. как строку его Utf8ToAnsi не поймет


Layner   (2008-04-09 09:37:00) [8]

clickmaker, а почему? заголовок даже есть в начале...

В общем история такая, работаю с Инди компанентами, TIdPOP. Приходят аттачи, раньше все шло на английском в названиях файла, сейчас на русском стали слать, будь они не ладны... название файла выдергиваю так
TIdAttachment(Msg.MessageParts.Items[цикл по вложениям]).Filename

Тогда может такой вариант, а может Инди и умеет сам преобразовывать? Не надо может мне мучатся, и руками делать преобразование?


clickmaker   (2008-04-09 09:28:00) [9]

что-то не похоже это на утф...


Layner   (2008-04-09 09:26:00) [10]

UTF8Decode тоже не понимает, оставляет UTF8 текст как есть... :(((


Наверх

Титульная страница Поиск, карта сайта Написать письмо