Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Проблема с кодировкой


Автор: Akella 20.1.2010, 21:54
Установил последнюю версию версию Indy 10.50.7
Код

Memo1.Text := Utf8ToAnsi( IdHTTP1.Get('http://www.kvartalexpress.org.ua/'));
Memo1.Text := IdHTTP1.Get('http://www.kvartalexpress.org.ua/');

Оба кода возвращают вместо кириллицы ???? ????????? ???? ????? знаки вопросов.
Читал, что инди, начиная с версии 10.5 сам пытаются выполнять конвертирование между кодировками. Но толку нету.
Может кто подскажет как решить проблему?

Автор: businessnet 21.1.2010, 01:04
Что никто не может помочь ?  сроки по софту горят ..... (      зря обновился )

Может написать в их техподдержку 
http://forums2.atozed.com/viewforum.php?f=7&sid=45862c3fb728a9a6bf93d3dd1ea13af1

напишите плиз, кто в английском силен, а то я неочень )) 

Автор: Akella 21.1.2010, 10:15
Я написал вчера вечером на их форуме. Но тема пока что даже не появилась. Ждёт премодерации.

Автор: Akella 21.1.2010, 13:35
Народ, проверьте этот код у кого установлена D2007 и Indy 10.5.7
Код

procedure TForm1.Button1Click(Sender: TObject);
var M:TStringStream;
begin
 M:=TStringStream.Create('');
 idHTTP1.Get('имя юникодного сайта, например винград',M);
 Memo1.Lines.Text:=M.DataString;
 M.Free;
end;

Автор: Akella 21.1.2010, 13:52
Код

Memo1.Lines.Text := M.DataString;


Возвращает юникодный текст, т.е. уже не знаки вопросов.

Код

Memo1.Lines.Text := UTF8Decode(M.DataString);


и
Код

Memo1.Lines.Text := Utf8ToAnsi(M.DataString);


возвращает пустоту (( 

D2007, Indy 10.1.5

Добавлено через 12 минут и 35 секунд
В юникодном контенте встречаются русские символы. Например, Яндекс.Директ. И поэтому Utf8ToAnsi запинается, и возвращает пустоту. Как удалить вот такой мусор типа Яндекс.Директ из полученного контента?

Автор: businessnet 21.1.2010, 16:02
Код

procedure TForm1.Button1Click(Sender: TObject);
var M:TStringStream;
begin
M:=TStringStream.Create('');
idHTTP1.Get('http:\\programmersforu m.ru',M);
Memo1.Lines.Text:=M.DataString;
M.Free;
end;


нормально заработало. буду юзать этот вариант.  delphi7+ последняя инди

Автор: Romikgy 21.1.2010, 17:16
Цитата(businessnet @  21.1.2010,  15:02 Найти цитируемый пост)
programmersforu m.ru

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

это не unf8!!!!

Автор: Akella 21.1.2010, 17:25
Romikgy, поздно, он уже в оффлайне smile 

Автор: businessnet 21.1.2010, 18:17
Цитата

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

это не unf8!!!! 


если это мне, то то я и не говорил что там utf8, я сказал что такая конструкция получения контента работает нормально. как с utf8 так и с windows-1251 

Автор: Akella 21.1.2010, 18:20
businessnet, не всегда  smile 

Цитата(Akella @  21.1.2010,  13:52 Найти цитируемый пост)
В юникодном контенте встречаются русские символы. Например, Яндекс.Директ. И поэтому Utf8ToAnsi запинается, и возвращает пустоту. Как удалить вот такой мусор типа Яндекс.Директ из полученного контента?


Автор: businessnet 21.1.2010, 19:44
берем список символов юникода. туда же добавляем пробел, знаки разделители и т.д. 
берем полученый контент.
в цикле перебираем посимвольно, если есть символ в таблице юникода, то откидаем в результирующую переменную, если нет пропускаем. 

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


по идее должно помочь ...  

Автор: Akella 21.1.2010, 20:14
И сколько по времени будет проверяться контент одной страницы?? Если ещё учесть, что страницу нужно получить, отпарсить...

Автор: businessnet 21.1.2010, 20:34
ну так не всю же страницу со всеми html и прочими кодами проверять таким образом.

разпарсить нужную часть и потом юзать.. 

+ сделать проверку если если возвращает как вы говорите пустую переменную когда неудачно конвертит из за того что есть русские символы.,

то только тогда использовать метод. 

меня по скорости устраивает, а там смотрите сами. 

Автор: Akella 21.1.2010, 23:25
Нашёл!
http://forum.vingrad.ru/index.php?showtopic=133239&view=findpost&p=1007351

Автор: Akella 22.1.2010, 00:31
Оказывается, что UTF8ToStrSmart обрезает контент  smile

Добавлено через 4 минуты и 49 секунд
Поспешил. Оказалось, что переменная i объявлена как word и длинный контент  обрезался. Объявил переменную i как integer  smile 

Автор: businessnet 23.1.2010, 16:49
ответили на ваше сообщение 

http://forums2.atozed.com/viewtopic.php?f=7&t=3011&sid=f954852ed1a8fb01167bccd41f6d06d5

напишите плиз еще по поводу индейцев последней версии и SSL, про ту ошибку с загрузкой DDL, может чего посоветуют или исправят. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)