Главная страница
    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
2-1245989782
novai
2009-06-26 08:16
2009.08.23
Директивы компилятора в релизе программы


15-1245919589
test
2009-06-25 12:46
2009.08.23
Обфускация


2-1245733905
Tornado
2009-06-23 09:11
2009.08.23
Копирование файлов


15-1245903296
Pavlov
2009-06-25 08:14
2009.08.23
Настройка работы


15-1245702601
Юрий
2009-06-23 00:30
2009.08.23
С днем рождения ! 23 июня 2009 вторник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский