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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с кодировкой при использование IdHTTP 
:(
    Опции темы
disketa
  Дата 22.7.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.5.2010

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



Возникает проблема с кодировкой при использование IdHTTP (DELPHI 2009)

Если делаешь запрос на сайт с кодировкой windows-1251
то в получаемом тексте кракозябры !

Как решить проблему!?
Подскажите как перекодировать текст из windows-1251 в UTF-8 ?
PM MAIL   Вверх
HoZeY
Дата 22.7.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 19.11.2008

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



Цитата(disketa @ 22.7.2010,  15:09)
Возникает проблема с кодировкой при использование IdHTTP (DELPHI 2009)

Если делаешь запрос на сайт с кодировкой windows-1251
то в получаемом тексте кракозябры !

Как решить проблему!?
Подскажите как перекодировать текст из windows-1251 в UTF-8 ?

Попробуй AnsiToUtf8()
PM MAIL WWW   Вверх
disketa
Дата 23.7.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.5.2010

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



Цитата(HoZeY @ 22.7.2010,  15:19)
Попробуй AnsiToUtf8()


Не помогает, вообще не чего не меняет!
PM MAIL   Вверх
Snowy
Дата 23.7.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(disketa @  22.7.2010,  15:09 Найти цитируемый пост)
Подскажите как перекодировать текст из windows-1251 в UTF-8 ?
Ну как декодировать тебе уже подсказали.
Хотя это для более ранних версий дельфи.
В 2009 для перекодировки используются TEncode и TDecode.
А то, что не помогло - это понятно. Чем это могло тебе помочь?
Зачем тебе вообще UTF8? Что ты с ним собрался делать? Заменить одни крякозяблики на другие?

А по сабжу
http.IOHandler.DefStringEncoding := TEncoding.нужная_тебе_кодировка
PM MAIL   Вверх
sbfactory
Дата 24.7.2010, 03:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.2.2010

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



Disketa, каким запросом вы получаете код страницы?

Запрос должен выглядеть примерно так:

Код

idhttp.Get(урл адрес загружаемого документа,dump2);


Где dump2 - TStream;

Вот кусок кода:
Код

var
s: string;
t: tstringlist;
dump2: TStream;
begin
t:=tstringlist.create;
dump2 := TMemoryStream.Create;

try
    idhttp.Get(listbox1.Items[0],dump2); /// загружаем страницу в дамп2
except
end;

dump2.Seek(0, soFromBeginning);
t.LoadFromStream(dump2); /// передаем данные дампа в стринглист

/// если дамп был в анси кодировке, то ничего перекодировать не надо.
t.Text:=utf8toansi(t.text); ///  если дамп был в утф, то юзаем эту функцию
t.Text:=koitowin(t.text); /// если дамп был в koi, то юзаем эту функцию

dump2.free;
t.free;
end;



Функция utf-8 стандартная.

Вот 100% правильная и рабочая функция koitowin (преобразование кодировки koi в ansi):
Код

...
const
Win:array[0..65] of string=
('А', 'Б', 'В', 'Г', 'Д', 'Е',
 'Ё', 'Ж', 'З', 'И', 'Й', 'К',
 'Л', 'М', 'Н', 'О', 'П', 'Р',
 'С', 'Т', 'У', 'Ф', 'Х', 'Ц',
 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь',
 'Э', 'Ю', 'Я', 'а', 'б', 'в' ,
 'г', 'д', 'е', 'ё', 'ж', 'з',
 'и', 'й', 'к', 'л', 'м', 'н',
 'о', 'п', 'р', 'с', 'т', 'у',
 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
Koi:array[0..65] of string=
('б', 'в', 'ч', 'з', 'д', 'е',
 'і', 'ц', 'ъ', 'й', 'к', 'л',
 'м', 'н', 'о', 'п', 'р', 'т',
 'у', 'ф', 'х', 'ж', 'и', 'г',
 'ю', 'ы', 'э', 'я', 'щ', 'ш',
 'ь', 'а', 'с', 'Б', 'В', 'Ч' ,
 'З', 'Д', 'Е', 'Ј', 'Ц', 'Ъ',
 'Й', 'К', 'Л', 'М', 'Н', 'О',
 'П', 'Р', 'Т', 'У', 'Ф', 'Х',
 'Ж', 'И', 'Г', 'Ю', 'Ы', 'Э',
 'Я', 'Щ', 'Ш', 'Ь', 'А', 'С');
...

function KoiToWin(str:string):string;
var
count,x,y,Index: Integer;
begin
Result := '';
count:=length(Str);
for x:=1 to count do
begin
index:=-1;
for y:=Low(Koi) to High(Koi) do
if Koi[y] = Str[x] then
begin
Index:=y;
Break;
end;
if Index=-1 then Result:=Result+Str[x]
else Result:=Result+Win[Index];
end;
end;


Пожалуйста.
PM MAIL   Вверх
disketa
Дата 24.7.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.5.2010

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



Спасибо sbfactory


Всё заработало, до этого использовал:

 idhttp.Get(listbox1.Items[0]);

При использование дампа всё заработало как надо!
PM MAIL   Вверх
disketa
Дата 24.7.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.5.2010

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



Возникла другая проблема, а как определить кодировку?

Есть два сайта на обоих используется кодировка utf-8, но на одном, если использовать преобразование: utf8toansi
получаются те же кракозябры!


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

Запрещено:

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

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

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

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

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


 




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


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

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