Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
ВнизПомогите конвернтнуть 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c