Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

перекодировка из UTF-8   Найти похожие ветки 

 
rizhiy87 ©   (2010-04-15 11:49) [0]

Пишу программу для отправки и получения HTML-пакетов с веб-сервера.

Проблема с приемеом. Заголовок принимается нормально, а вот сам текст ответа - в UTF-8 иероглифами.
Как распознать эту кодировку в делфи 7 для отображения и дальнейшей обработки?
UtfEncode и UTF8ToAnsi пробовал - возвращают пустую строку.


 
Palladin ©   (2010-04-15 12:11) [1]

если уже пробовал, то тогда - никак


 
Anatoly Podgoretsky ©   (2010-04-15 12:15) [2]

MultibyteToWideChar, это прямой путь, остальное делается поверх этого.


 
rizhiy87 ©   (2010-04-15 12:16) [3]

тогда существуют ли нестандартные компоненты или библиотеки для подобных задач?
Если да, то посоветуйте.
Заранее спасибо


 
Anatoly Podgoretsky ©   (2010-04-15 12:18) [4]

> rizhiy87  (15.04.2010 12:16:03)  [3]

Нафигу нужные сурогаты, когда есть стандартные пути и библиотеки?
Что же вас так тянет на велосипеды?


 
Плохиш ©   (2010-04-15 12:38) [5]


> Нафигу нужные сурогаты, когда есть стандартные пути и библиотеки?
> Что же вас так тянет на велосипеды?

Со стандартными надо разбираться, мозга напрягать, а не стандартные здесь нахаляву разработают...


 
han_malign   (2010-04-15 13:05) [6]

а s1:= UTF8String(s) пробовал?
уверен что там UTF8, а не КОИ-8?


 
Anatoly Podgoretsky ©   (2010-04-15 13:15) [7]

> Плохиш  (15.04.2010 12:38:05)  [5]

Только большинство из них работоспособны в узких рамках.


 
Loginov Dmitry ©   (2010-04-15 17:12) [8]


> Как распознать эту кодировку в делфи 7


А зачем ее распазновывать, WEB-сервер ее в заголовке указывает.


> для отображения


TWebBrowser должен без проблем отобразить, в любой кодировке.


>  и дальнейшей обработки?


Обрабатывать в формате WideString.
Для конвертации использовать UTF8ToAnsi рискованно,
есть много символов, которые не имеют аналогов в Ansi.

P.S. Я бы не стал мучаться, установил бы Delphi 2010


 
rizhiy87 ©   (2010-04-15 17:12) [9]


> уверен что там 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 получаю вышепредъявленный заголовок, а дальше
‹kϱWŸ_»üVÐólÍ7�À
-×1mÃX}AaJ# ½%ÃØÚÚÒ·æu×_7Ö®Û«€�å&#1 63;¦zêµ°


 
Palladin ©   (2010-04-15 17:18) [10]


> s:= UTF8String(r);

UTF8String это тип, а не функция, в этом месте ты всего лишь привел тип, никак не конвертируя

и ведь самое главное наверху написал что использовал функции, соврал получается... а нам тут сидеть гадать... как всегда, короче


 
Loginov Dmitry ©   (2010-04-15 17:19) [11]

Не проще ли использовать компонент IdHTTP?


 
Loginov Dmitry ©   (2010-04-15 17:20) [12]


> Content-Encoding: gzip


А разархивировать кто будет?


 
rizhiy87 ©   (2010-04-15 17:20) [13]

Ф
> наверху написал что использовал функции, соврал получается.
> ..

нее.. я их использовал.. это уже код, исправленый в соответчтвии с советамми.


 
rizhiy87 ©   (2010-04-15 17:21) [14]


> А разархивировать кто будет?

Оп! А отсюда поподробнее)


 
Loginov Dmitry ©   (2010-04-15 17:30) [15]


> Оп! А отсюда поподробнее)


IdHTTP!


 
rizhiy87 ©   (2010-04-15 17:58) [16]

спасибо буду ковырять в эту сторону...


 
rizhiy87 ©   (2010-04-15 18:50) [17]

вот.. По тому, что нашел в Интернет по поводу Инди, наваял функию


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 вывлжит нормальный заголовок, похожий на показаный выше, а вот в мемо снова
‹
что с этим  Content-Encoding: gzip делать? загвоздка ведь в нем?


 
Loginov Dmitry ©   (2010-04-15 23:22) [18]

Кстати, а что за сервак такой странный? Упорно отвечает Content-Encoding: gzip, хотя его об этом никто не просит.


 
Anatoly Podgoretsky ©   (2010-04-16 08:43) [19]

> Loginov Dmitry  (15.04.2010 23:22:18)  [18]

А пользователей никто не спрашивает, в веб строение каждый сам себе Наполеон


 
Loginov Dmitry ©   (2010-04-16 09:29) [20]


> А пользователей никто не спрашивает, в веб строение каждый
> сам себе Наполеон


Наверно сейчас все браузеры поддерживают gzip, поэтому сайтостроители и не заморачиваются простейшей проверкой...


> Content-Encoding: gzip делать? загвоздка ведь в нем?


В D7 распаковка gzip видимо не поддерживается.
Зато в D2007 есть специальный компонент TIdCompressorZLibEx. Он свое дело делает.


 
Демо ©   (2010-04-16 13:14) [21]


> что с этим  Content-Encoding: gzip делать? загвоздка ведь
> в нем?


Указывать в запросе серверу, что не надо сжимать данные.


 
Loginov Dmitry ©   (2010-04-16 23:56) [22]


>
> Указывать в запросе серверу, что не надо сжимать данные.
>


Если не указывать Accept-Encoding: gzip, то сервак и не должен ничего сжимать, имхо.


 
rizhiy87 ©   (2010-04-17 03:28) [23]

проблема решилась простым
Accept-Encoding: text/html
=)) Спасибо всем откликувшимся...

следующая проблема тут: :)
http://delphimaster.net/view/2-1271459822/


 
Loginov Dmitry ©   (2010-04-17 14:11) [24]


> проблема решилась простым
> Accept-Encoding: text/html


Абалдеть! Обычно для этих целей используют Accept: text/html



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.119 c
15-1274120084
М. Береговой
2010-05-17 22:14
2010.08.27
Почему нельзя делить на ноль?


2-1270538489
istok
2010-04-06 11:21
2010.08.27
TTimer в Delphi2010


4-1234979528
Skyhawk
2009-02-18 20:52
2010.08.27
Изменение цвета строки в TListView


15-1270759152
Nickola2
2010-04-09 00:39
2010.08.27
Борьба с рекламными баннерами не увенчалась успехом


2-1270885260
roman2
2010-04-10 11:41
2010.08.27
Координаты точки