TMemo и HTML страница с кодировкой win1251?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TMemo и HTML страница с кодировкой win1251?

Сообщение Daimos » 25.06.2016 18:57:48

Всем привет!

Изучаю FreePascal/Lazarus, надобно мне получить по http страницу html, она в кодировке windows-1251, прописано в <header><meta charset="windows-1251">.

Код: Выделить всё
webClient := TFPHTTPClient.Create(nil);
Memo1.Caption := webClient.Get('http://address.com/');
webClient.Free;


Memo отображает всю кириллицу символом '?', хотя по сути это же AnsiString?

Пробовал шрифт менять Memo на Arial, Arial Unicode - не помогает!
Пробовал Charset менять в шрифте (Memo.Font.CharSet) на ANSI_CHARSET/RUSSIAN_CHARSET - не помогает!

Потом через webClient.Get сохранил всю страницу в файл, Notepad/WordPad/Notepad++ отображают его без проблем.

Помню была схожая проблема в C# и UTF8, но строки там WideString, поэтому просто брал строку и прогонял её через UTF8 Encoder.
А вот в Лазаре не могу разобраться, помогите пожайлуста
Daimos
незнакомец
 
Сообщения: 2
Зарегистрирован: 25.06.2016 18:38:01

Re: TMemo и HTML страница с кодировкой win1251?

Сообщение Лекс Айрин » 25.06.2016 19:22:19

мемо просто не предназначен для разных кодировок. Нужно перекодировать их в utf8. Явно.

Код: Выделить всё
//........
MyFile := OpenDialog1.FileName;
   // ......
   
    case OpenDialog1.FilterIndex of
      //..............................
      2,4:
      begin   //win1251
                {$IFDEF MSWINDOWS} //возможно, директивы препроцессора устарели...
        Str.LoadFromFile(UTF8ToSys(MyFile));
                 {$ENDIF}
                 {$IFDEF LINUX}
        Str.LoadFromFile(MyFile);
{$ENDIF}
        MainEditor.Lines.Text := CP1251ToUTF8(Str.Text);// собственно перекодировка
       //.................................
      end;
      //...............................................

      else
      begin
      end;           
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: TMemo и HTML страница с кодировкой win1251?

Сообщение resident » 25.06.2016 19:37:07

Daimos писал(а): просто брал строку и прогонял её через UTF8 Encoder.

Тоже самое
1) подключить модуль LConvEncoding
2) использовать кодер, см. выше в примере Лекс-а
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: TMemo и HTML страница с кодировкой win1251?

Сообщение Daimos » 25.06.2016 20:57:53

Лекс Айрин спасибо за решение!
resident спасибо за имя модуля, а то я с Лазарем совсем недавно, еще не разобрался с модулями/компонентами/пакетами, надо срочно справку прикручивать :)

1. Как я понял все компоненты (LCL) отображают и работают с текстом в кодировке UTF8?
2. А для чего AnsiToUtf8?
3. Что даст такой тип: ???
Код: Выделить всё
type
   AnotherString = type AnsiString(1251);
Daimos
незнакомец
 
Сообщения: 2
Зарегистрирован: 25.06.2016 18:38:01

Re: TMemo и HTML страница с кодировкой win1251?

Сообщение pupsik » 25.06.2016 23:44:03

Кодировка страницы указывается в шапке (иногда). Лазарь работает в ютф8. Т.е. читаем ответ сервера и при необходимости перекодируем в ютф8.
Что даст такой тип: ???
скажет что строка у вас в 1251. Только отобразить его в мемо надо в ютф8.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 84

Рейтинг@Mail.ru
cron