![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите конвернтнуть 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 текст как есть... :(((