Форум: "Начинающим";
Текущий архив: 2011.01.23;
Скачать: [xml.tar.bz2];
ВнизЧем преобразовать UTF-8 в Windows-1251 Найти похожие ветки
← →
Делфиец (2010-10-27 08:49) [0]Если кто знает есть ли в JEDI конвертеры кодировок?
Ищу подходящий модуль желательно универсальный, что бы разные кодировки преобразовывал чем больше тем лучше или пакет модулей, если кто знает подскажите пожалуйста.
← →
Anatoly Podgoretsky © (2010-10-27 08:50) [1]> Делфиец (27.10.2010 08:49:00) [0]
MultiByteToWideChar
← →
Palladin © (2010-10-27 10:32) [2]набери три буквы utf и нажми ctrl-space
← →
Делфиец (2010-10-27 10:48) [3]Почему то не получается.
Почему то IdMessage.From или IdMessage.Subject возвращают строку как есть в таком формате =?UTF-8?B?0K/QvdC40L0g0JDQu9C10LrRgdC10Lk=?=
Так полагаю, что строка должна предварительно еще декодироваться, но почему то не декодируется. Может кто-нибудь знает?
Я попробовал так сделать:FrmMain.IdDecoderMIME1.DecodeString(IdMessage.From)
получилась ерунда не похожая ни на чтояхяяэ
эЭЌТ
Ѕ]]џя
я эту ерунду вставил в текстовый редактор Notepad++, а затем перебрал все кодировки - увы читаемым текстом не стало.
← →
Медвежонок Пятачок © (2010-10-27 10:59) [4]потому что это не утф-8
← →
Делфиец (2010-10-29 19:57) [5]Преодолел наконец то казалось бы неприодолимое. Если кому будет интересно то можете воспользоваться этим советом.
Проблема: При получении письма в кодировке UTF-8 некоторые поля отображаются в таком виде, например IdMessage.From.Name = "=?UTF-8?B?0K/QvdC40L0g0JDQu9C10LrRgdC10Lk=?=". Немного покапавшись в unit IdCoderHeader.pas, который используется для декодирования - полностью убедился, что UTF-8 не поддерживается т.е. он его никак не парсит. Что бы привести подобные поля заголовков в читаемый вид, нужно сделать свой парсер руками, но это дело не совсем из приятных.
Решение проблемы:
Используем все тот же юнит.
Вот функция при помощи которой можно и парсить и декодировать Headers
Uses IdCoderHeader;function TFrmMain.UTF8Decode(StrValue: String): String;
begin
if StrValue = "" then exit;
// Великий смысл этого кода в том, что UTF-8 ни как не парсится, а KOI-8, windows-1251, iso-8859 парсится
// значит меняем KOI-8 в строке "=?UTF-8?B?0K/QvdC40L0g0JDQu9C10LrRgdC10Lk=?=" на любой из них и пропускаем через декодер
StrValue := StringReplace(StrValue,"UTF-8","KOI-8",[rfIgnoreCase,rfReplaceAll]);
// Испотльзуем IdCoderHeader.DecodeHeader() которая запросто будет парсить наш хейдер
Result := Utf8ToAnsi(DecodeHeader(StrValue));
// И на выходе получаем нормальный текст...
end;
← →
Игорь Шевченко © (2010-10-29 20:05) [6]Ужос на крыльях ночи.
Читать наизусть RFC 2045
http://tools.ietf.org/html/rfc2045
← →
Делфиец (2010-10-29 20:14) [7]
> Игорь Шевченко © (29.10.10 20:05) [6]
смотреть сЮда
Это все с чем ИНДИ работает, я то говорю про то, как его научть работать с остальным.
// ...................................
// Get the Charset part.
EncodingBeforeEnd := -1;
LEncodingStartPos := PosIdx("=?ISO", Sys.UpperCase(Header), 1); {do not localize}
if LEncodingStartPos = 0 then begin
LEncodingStartPos := PosIdx("=?WINDOWS", Sys.UpperCase(Header), 1); {do not localize}
end;
if LEncodingStartPos = 0 then begin
LEncodingStartPos := PosIdx("=?KOI8", Sys.UpperCase(Header), 1); {do not localize}
end;
// .................
← →
Делфиец (2010-10-29 20:38) [8]Что бы из это строки =?UTF-8?B?0K/QvdC40L0g0JDQu9C10LrRgdC10Lk=?= получить текст в формате UTF-8 нужно извлеть строку 0K/QvdC40L0g0JDQu9C10LrRgdC10Lk= и пропустить через MIME декодер, но этого ИНДИ делать не будет по то как не заточен под это, хотя сдается мне, что все строки закодированы одинаково, что с такой KOI-8 или с такой windows-1251, iso-8859 кодировкой. Всего то нужно поменять UTF-8 на то, что понимает ИНДИ и он сам извлечет нужную строку и декодирует за вас ее в UTF-8
← →
Игорь Шевченко © (2010-10-29 20:52) [9]Читать, читать и еще раз читать.
RFC - они рулез
← →
Делфиец (2010-10-29 20:57) [10]
> Игорь Шевченко © (29.10.10 20:52) [9]
Хм.. точно рулез.
RFC - а куда же нам без него?
← →
Eraser © (2010-10-29 23:46) [11]см. UTF8ToString и прочее для декодирования в юникод.
для кодирования см. TEncoding.
← →
Anatoly Podgoretsky © (2010-10-30 10:19) [12]
> =?UTF-8?B?0K
До UTF тут еще далеко.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.01.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c