![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перекодировка из UTF-8 [D7, WinXP]
rizhiy87 © (2010-04-15 11:49:00)Пишу программу для отправки и получения HTML-пакетов с веб-сервера.
Проблема с приемеом. Заголовок принимается нормально, а вот сам текст ответа - в UTF-8 иероглифами.
Как распознать эту кодировку в делфи 7 для отображения и дальнейшей обработки?
UtfEncode и UTF8ToAnsi пробовал - возвращают пустую строку.
Loginov Dmitry (2010-04-17 14:11:00) [1]
> проблема решилась простым
> Accept-Encoding: text/html
Абалдеть! Обычно для этих целей используют Accept: text/html
rizhiy87 (2010-04-17 03:28:00) [2]проблема решилась простым
Accept-Encoding: text/html
=)) Спасибо всем откликувшимся...
следующая проблема тут: :)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1271459822&n=18
Loginov Dmitry (2010-04-16 23:56:00) [3]
>
> Указывать в запросе серверу, что не надо сжимать данные.
>
Если не указывать Accept-Encoding: gzip, то сервак и не должен ничего сжимать, имхо.
Демо (2010-04-16 13:14:00) [4]
> что с этим Content-Encoding: gzip делать? загвоздка ведь
> в нем?
Указывать в запросе серверу, что не надо сжимать данные.
Loginov Dmitry (2010-04-16 09:29:00) [5]
> А пользователей никто не спрашивает, в веб строение каждый
> сам себе Наполеон
Наверно сейчас все браузеры поддерживают gzip, поэтому сайтостроители и не заморачиваются простейшей проверкой...
> Content-Encoding: gzip делать? загвоздка ведь в нем?
В D7 распаковка gzip видимо не поддерживается.
Зато в D2007 есть специальный компонент TIdCompressorZLibEx. Он свое дело делает.
Anatoly Podgoretsky (2010-04-16 08:43:00) [6]> Loginov Dmitry (15.04.2010 23:22:18) [18]
А пользователей никто не спрашивает, в веб строение каждый сам себе Наполеон
Loginov Dmitry (2010-04-15 23:22:00) [7]Кстати, а что за сервак такой странный? Упорно отвечает Content-Encoding: gzip, хотя его об этом никто не просит.
rizhiy87 (2010-04-15 18:50:00) [8]вот.. По тому, что нашел в Интернет по поводу Инди, наваял функию
procedure TForm1.Button1Click(Sender: TObject);
var
Data : TStringList;
StrPage, UserID, UserName : String;
i : integer;
begin
try
Data := TStringList.Create;
Http.AllowCookies := true;
Http.HandleRedirects := true;
Data.Add('login[name]=' + Edit1.Text);
Data.Add('login[pass]=' + Edit2.Text);
StrPage := Http.Post(' http://myhost/', Data);
finally
showmessage(http.Response.RawHeaders.GetText)
end;
Memo1.Lines.Text := StrPage;
end;
showmessge вывлжит нормальный заголовок, похожий на показаный выше, а вот в мемо снова
\x1F‹\x8
что с этим Content-Encoding: gzip делать? загвоздка ведь в нем?
rizhiy87 (2010-04-15 17:58:00) [9]спасибо буду ковырять в эту сторону...
Loginov Dmitry (2010-04-15 17:30:00) [10]
> Оп! А отсюда поподробнее)
IdHTTP!
rizhiy87 (2010-04-15 17:21:00) [11]
> А разархивировать кто будет?
Оп! А отсюда поподробнее)
rizhiy87 (2010-04-15 17:20:00) [12]Ф
> наверху написал что использовал функции, соврал получается.
> ..
нее.. я их использовал.. это уже код, исправленый в соответчтвии с советамми.
Loginov Dmitry (2010-04-15 17:20:00) [13]
> Content-Encoding: gzip
А разархивировать кто будет?
Loginov Dmitry (2010-04-15 17:19:00) [14]Не проще ли использовать компонент IdHTTP?
Palladin (2010-04-15 17:18:00) [15]
> s:= UTF8String(r);
UTF8String это тип, а не функция, в этом месте ты всего лишь привел тип, никак не конвертируя
и ведь самое главное наверху написал что использовал функции, соврал получается... а нам тут сидеть гадать... как всегда, короче
rizhiy87 (2010-04-15 17:12:00) [16]
> уверен что там UTF8, а не КОИ-8?
Заголовок ответа:
HTTP/1.1 200 OK
Date: Thu, 15 Apr 2010 13:03:22 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.2.10-2ubuntu6.4
15-Apr-2010 15:03:22 GMT; path=/
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 5444
Connection: close
Content-Type: text/html; charset=utf-8
Так что вроде как именно UTF-8
уточню кусочек кода обработчика кнопки на всякий случай:
TcpClient1.Open;
TcpClient1.Sendln(s,'');
r:=TcpClient1.Receiveln('');
s:= UTF8String(r);
memo2.Text:=s;
TcpClient1.Close;
в memo2 получаю вышепредъявленный заголовок, а дальше
\x1F‹\x8kϱWŸ_»ü\x1BVÐólÍ7�À
-×1mÃX}AaJ#\xC½%ÃØÚÚÒ·æu×_7Ö®\x18Û\x8«€�å 63;\x16¦zêµ°
Loginov Dmitry (2010-04-15 17:12:00) [17]
> Как распознать эту кодировку в делфи 7
А зачем ее распазновывать, WEB-сервер ее в заголовке указывает.
> для отображения
TWebBrowser должен без проблем отобразить, в любой кодировке.
> и дальнейшей обработки?
Обрабатывать в формате WideString.
Для конвертации использовать UTF8ToAnsi рискованно,
есть много символов, которые не имеют аналогов в Ansi.
P.S. Я бы не стал мучаться, установил бы Delphi 2010
Anatoly Podgoretsky (2010-04-15 13:15:00) [18]> Плохиш (15.04.2010 12:38:05) [5]
Только большинство из них работоспособны в узких рамках.
han_malign (2010-04-15 13:05:00) [19]а s1:= UTF8String(s) пробовал?
уверен что там UTF8, а не КОИ-8?
Плохиш (2010-04-15 12:38:00) [20]
> Нафигу нужные сурогаты, когда есть стандартные пути и библиотеки?
> Что же вас так тянет на велосипеды?
Со стандартными надо разбираться, мозга напрягать, а не стандартные здесь нахаляву разработают...