Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.04;
Скачать: CL | DM;

Вниз

Помогите конвернтнуть UTF8 в Win1251   Найти похожие ветки 

 
Layner ©   (2008-04-09 09:11) [0]

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


 
Layner ©   (2008-04-09 09:26) [1]

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


 
clickmaker ©   (2008-04-09 09:28) [2]

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


 
Layner ©   (2008-04-09 09:37) [3]

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

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

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


 
clickmaker ©   (2008-04-09 09:52) [4]

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


 
Reindeer Moss Eater ©   (2008-04-09 10:05) [5]

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

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


 
han_malign ©   (2008-04-09 10:18) [6]

=?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 текст"


 
Layner ©   (2008-04-09 10:27) [7]

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


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

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


 
Anatoly Podgoretsky ©   (2008-04-09 15:31) [9]

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


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

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

..
 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;



Страницы: 1 вся ветка

Текущий архив: 2008.05.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
6-1185774105
Darth Avenger
2007-07-30 09:41
2008.05.04
Отправка письма с аттачем


15-1206102762
Kolan
2008-03-21 15:32
2008.05.04
Image Button какой выбрать?


2-1207284685
Pavelkq
2008-04-04 08:51
2008.05.04
Присоединение окна чужой программы к форме.


3-1196665593
Alice
2007-12-03 10:06
2008.05.04
распарсить в БД


2-1207224957
Наташа
2008-04-03 16:15
2008.05.04
Получить объект по имени