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

Вниз

Помогите с оптимизацией кода   Найти похожие ветки 

 
novai   (2009-06-24 09:10) [0]

Нужно считать данные из TMemoryStream (там только текст) в WideString.
вот мой код:
stream:TMemoryStream;
tmp:WideString;
buf: char;

    for n := 1 to stream.Size do
    begin
      stream.ReadBuffer(buf, 1);
      tmp:=tmp + buf;
    end;

как оптимизировать (не читать по 1)?


 
Сергей М. ©   (2009-06-24 09:18) [1]

tmp := WideString(PWideChar(stream.Memory))


 
RWolf ©   (2009-06-24 09:21) [2]

tmp:string;
...
setLength(tmp,stream.Size);
stream.ReadBuffer(tmp[1],stream.Size);

после чего конвертируем ANSI в юникод.


 
Сергей М. ©   (2009-06-24 09:24) [3]


> из TMemoryStream (там только текст) в WideString.


В [1] предполагается, что в стриме лежит строка с терминирующим нулем на конце


 
novai   (2009-06-24 09:46) [4]

в обоих случаях получаю в tmp такое: ????????›??????????????•????..
это проблемма с кодировкой? в stream находится html страница полученая с помощью: IdHTTP1.Get("", stream);


 
MBo ©   (2009-06-24 10:05) [5]

в stream лежит ansi или wide?


 
Сергей М. ©   (2009-06-24 10:06) [6]


> в stream находится html страница полученая с помощью: IdHTTP1.
> Get("", stream);


Не знаю что у тебя там находится, возможно и кодировка неизвестная, но у меня все замечательно работает

procedure TForm1.Button5Click(Sender: TObject);
var
 wstr1,wstr2 : WideString;
 stream: TMemoryStream;
begin
 wstr1 := "Ìîÿ þíèêîäîâàÿ ñòðîêà";
 stream := TMemoryStream.Create;
 try
   stream.WriteBuffer(PWideChar(wstr1)^, Succ(Length(wstr1)) * SizeOf(WideChar));
   wstr2 := PWideChar(stream.memory);
   ShowMessage(wstr2);
 finally
   stream.Free;
 end;
end;


 
Anatoly Podgoretsky ©   (2009-06-24 10:06) [7]

Да нигде нет показа tmp, а оно не визуальный компонент.


 
novai   (2009-06-24 10:22) [8]

да там utf (штирлиц сказал), это ansi или wide? (при ansi в tmp все читается, но русские буквы корявые)


 
novai   (2009-06-24 10:26) [9]

Utf8ToAnsi для tmp результата не дал(


 
Плохиш ©   (2009-06-24 11:00) [10]


> novai   (24.06.09 09:46) [4]
>
> в обоих случаях получаю в tmp такое: ????????›??????????
> ????•????..

Чем смотрим?


 
palva ©   (2009-06-24 11:03) [11]


> да там utf (штирлиц сказал), это ansi или wide?

Ни то, ни другое. Да и не мог Штирлиц такое сказать. utf-8 - еще куда ни шло. Вы уж пишите, что у вас на самом деле. Если не знаете терминов, то выкладывайте код или 16-ричный вид.


 
novai   (2009-06-24 11:08) [12]


>
> Чем смотрим?

отладчиком по точке останова...

> Да и не мог Штирлиц такое сказать. utf-8

делал utf8 to win и utf7 to win, одинаково нормально переводит...

гружу от сюда: IdHTTP1.Get("http://angara.net/meteo/?loc=irk", stream);


 
novai   (2009-06-24 11:10) [13]

кусок из tmp:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"#$D#$A"<html><head><title>Angara.Net - Активный отдых, спорт, туризм, путешествия, фото.</title>"#$D#$A"<link rel="stylesheet" type


 
Palladin ©   (2009-06-24 11:15) [14]

Это не WideString, это UTF8

UTF8Decode + F1


 
brother ©   (2009-06-24 11:15) [15]

точнее: ссылки разные, но все на этот сайт...


 
palva ©   (2009-06-24 11:15) [16]

Браузерам оттуда возвращается  Windows-1251.
Укажи в UserAgent, что ты браузер, и ожидаешь русский язык и тебе тоже сервер отдаст страничку, как надо. Точных названий параметров не помню.


 
Palladin ©   (2009-06-24 11:16) [17]

чет я стормозил...


 
palva ©   (2009-06-24 11:19) [18]

[16] был не прав, браузеру вернулось utf-8


 
novai   (2009-06-24 11:21) [19]


> [16] был не прав, браузеру вернулось utf-8

да я посмотрел, там оно


 
novai   (2009-06-24 11:56) [20]

Спасибо всем отвечавшим! Все работает.



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

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

Наверх




Память: 0.51 MB
Время: 0.01 c
2-1245839187
Sesh
2009-06-24 14:26
2009.08.23
Задать атрибуты файлам


1-1212645024
EgorovAlex
2008-06-05 09:50
2009.08.23
Есть TAction и он назначен кнопке в тулбаре и пункту меню,


15-1245443402
Юрий
2009-06-20 00:30
2009.08.23
С днем рождения ! 20 июня 2009 суббота


1-1212546310
San1712
2008-06-04 06:25
2009.08.23
Как добавлять строки в TListView компонент чтобы он не мигал ?


6-1205792707
cerber
2008-03-18 01:25
2009.08.23
Twebbrowser and Newwindow