Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
1-1212748708
Ольга
2008-06-06 14:38
2009.08.23
Компонента cxGrid (DevExpress)


2-1245923503
@!!ex
2009-06-25 13:51
2009.08.23
Как установить окну пустой курсор?


15-1245496380
Palladin
2009-06-20 15:13
2009.08.23
Это не цикл это рекурсия


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


2-1245924610
webpauk
2009-06-25 14:10
2009.08.23
Определение процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский