Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EMail, tidPop3 Проблема с кодировкой, абра-кадабра с кирилицей...! помогите! 
:(
    Опции темы
murod
Дата 8.2.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

Репутация: нет
Всего: 4



наверно у меня проблема с кодировкой. Я открываю Еmail и оттуда следующим образом качаю
прикрепленные файлы.
Код

pop:tidpop3;
**********************************
    msg:=TIdMessage.Create(pop);
    pop.Retrieve(mc,msg);
    for i:=0 to msg.MessageParts.Count-1 do
      begin
       if saveat then
       with msg.MessageParts do
        begin
         form1.Repaint;
         if items[i].ClassType=TIdAttachment then
           with TIdAttachment(items[i]) do
             try
              ext:=LowerCase(ExtractFileExt(filename));
              if ext='.txt' then
               begin
                if not directoryexists(folder+'\messages') then createdir(folder+'\messages');
                SaveToFile(folder+'\messages\'+filename);
                if fileexists(folder+'\messages\'+filename) then
                 begin
                   assignfile(fayl,folder+'\messages\'+filename);
                   Append(fayl);
                   writeln(fayl,'***Message begin***');
                   writeln(fayl,lastf);
                   writeln(fayl,'***end***');
                   closefile(fayl);
                 end;
               end;
             except Form1.Memo1.Lines.Add('Cannot copy mail- '+FileName); end;
        end;
      end;

Файлы с расширением *.тхт. всё качается нормално, но тока текст: "Печать по две шт" Преврашается в абра-кадабру:"Печать РїРѕ РґРІРµ С?С‚ " и с именем файла тоже точно так. Кто знает подскажите пожалуйста в чем проблема? Буду очень рад.
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Это не абракадабра, а юникод.
Запихивай его в переменную типа WideChar, тогда сможешь спокойно работать.
Добавлено @ 19:17
И еще совет:
не
Код
directoryexists(folder+'\messages') then createdir(folder+'\messages');
,а
Код
ForceDirectories(folder+'\messages');

PM MAIL   Вверх
murod
Дата 8.2.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

Репутация: нет
Всего: 4



Спасибо. Пожалуйста если не трудно скинте пару строчек примера. с шрифтами, кодировками у меня очень плохо. smile
Добавлено @ 19:24
и еще как быть с именем файла? и тут тоже точно такие проблемы! filename в widestring надо конвертить?
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Вот пример перекодирования файла из Unicode в Ansi:
Код
var
  w: WideString;
  s: string;
  fs: TFileStream;
begin
  fs:=TFileStream.Create('C:\1.txt', fmOpenRead or fmShareDenyNone);
  SetLength(w, (fs.Size + 1) div SizeOf(WideChar));
  fs.ReadBuffer(w[1], fs.Size);
  s := w;
  fs.Free;
  fs:=TFileStream.Create('C:\2.txt', fmCreate);
  fs.Write(s[1], Length(s));
  fs.Free;
end;

PM MAIL   Вверх
murod
Дата 8.2.2006, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

Репутация: нет
Всего: 4



спасибо, шас попробую
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



А вот тебе функция для перекодирования строки из юникода в анси, для случая, когда юникод текст у тебя в стринге:
Код

function UniToAnsi(s: string): string;
var
  w: WideString;
begin
  SetLength(w, (Length(s) + 1) div SizeOf(WideChar));
  move(s[1], w[1], Length(s));
  result := w;
end;

PM MAIL   Вверх
murod
Дата 8.2.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

Репутация: нет
Всего: 4



а просто саму кодировку чтения с email а поменять нельзя?
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Нет. Кодировку определяешь не ты, а человек, отправивший письмо.
В какой кодировке он написал, в такой ты и принимаешь.
PM MAIL   Вверх
murod
Дата 8.2.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

Репутация: нет
Всего: 4



мне шас надо сперва скачать файл а потом его конвертнуть ? И на какую кодировку надо мне конвертнуть? Первоначальная кодировка у меня какая?
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(murod @ 8.2.2006, 19:42 Найти цитируемый пост)
мне шас надо сперва скачать файл а потом его конвертнуть
Естественно. Пока ты его не скачаешь, ничего с ним делать не сможешь.

Цитата(murod @ 8.2.2006, 19:42 Найти цитируемый пост)
И на какую кодировку надо мне конвертнуть
В обычную Ansi. Смотри первый код. Как раз для тебя и написал.

Цитата(murod @ 8.2.2006, 19:42 Найти цитируемый пост)
Первоначальная кодировка у меня какая?
Unicode UTF-16. Он же WideString. Он же просто юникод.
PM MAIL   Вверх
murod
Дата 8.2.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

Репутация: нет
Всего: 4



Понятно, а первоначальная кодировка будет менятся в зависимости кто его отправил
значить мне надо с перва узнать кодировку письма, и потом соответственно надо его конвертнуть на Ansi я прав?
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Именно. Но это далеко не так просто.
Например у Outlook это не получается, а TheBat справляется весьма неплохо.
Так что это довольно сложный вопрос.
Но с юникодом проще. Существует функция, которая тебе поможет.
Код

if IsTextUnicode(pointer(s), Length(s), nil) then ЭтоЮникод!;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1005 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.