Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1286396952
Юрий
2010-10-07 00:29
2011.01.23
С днем рождения ! 7 октября 2010 четверг


2-1288779266
Евгений007
2010-11-03 13:14
2011.01.23
не работает getmem


2-1288332436
Abcdef123
2010-10-29 10:07
2011.01.23
Есть ли компонент MessageDlg с дополнительным чекбоксом на форме?


2-1288286941
Scott Storch
2010-10-28 21:29
2011.01.23
масштабирование


15-1286434552
kukuikar
2010-10-07 10:55
2011.01.23
Import Type Library





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский