Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2010, 14:00   #11
X11
Пользователь
 
Регистрация: 20.01.2010
Сообщений: 54
По умолчанию

Скорее всего, что где-то встречается вместе с юникодными иерогливами и русские буквы, как это у меня было однажды. Т.е. после удаления из юникодного текста всей кириллицы я смог выполнить Utf8ToAnsi
X11 вне форума Ответить с цитированием
Старый 21.01.2010, 14:01   #12
X11
Пользователь
 
Регистрация: 20.01.2010
Сообщений: 54
По умолчанию

Как я и предполагал. Нужно удалить вначале Яндекс.Директ, а потом можно и преобразовывать текст с помощью Utf8ToAnsi

Последний раз редактировалось X11; 21.01.2010 в 14:07.
X11 вне форума Ответить с цитированием
Старый 21.01.2010, 14:03   #13
X11
Пользователь
 
Регистрация: 20.01.2010
Сообщений: 54
По умолчанию

Теперь вопрос ещё. Как удалить из юникодного текста весь такой мусор, типа Яндекс.Директ? А то Utf8ToAnsi тупит и не хочет конвертировать текст
X11 вне форума Ответить с цитированием
Старый 21.01.2010, 15:59   #14
business-net
 
Регистрация: 24.05.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от X11 Посмотреть сообщение
business-net, ты обновлял их SVN или установил из tiburon.zip?
ага, обновлял через менеджер SVN,

вариант

procedure TForm1.Button1Click(Sender: TObject);
var M:TStringStream;
begin
M:=TStringStream.Create('');
idHTTP1.Get('http:\\programmersforu m.ru',M);
Memo1.Lines.Text:=M.DataString;
M.Free;
end;


у меня нормально заработал на delphi7 и последняя инди.

только там где юникод прийдется сначало пообрезать все лишнее кроме текста.
business-net вне форума Ответить с цитированием
Старый 21.01.2010, 16:08   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мой вам совет если надо выделять русский текст то вырезайте его из HTML и потом конвертируйте.

ЗЫ: X11, боюсь минус получишь...за 4 поста подряд.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.01.2010, 00:52   #16
X11
Пользователь
 
Регистрация: 20.01.2010
Сообщений: 54
Хорошо

Вот нормальная функция декодирования юникода utf8 в ANSI

Код:
{Convert string from UTF-8 format into ASCII}
function UTF8ToStr(Value: String): String;
var
  buffer: Pointer;
  BufLen: LongWord;
begin
  BufLen := Length(Value) + 4;
  GetMem(buffer, BufLen);
  FillChar(buffer^, BufLen, 0);
  MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
  Result := WideCharToString(buffer);
  FreeMem(buffer, BufLen);
end;
{Convert string from UTF-8 format mixed with standart ASCII symbols($00..$7f)}
function UTF8ToStrSmart(Value: String): String;
var
  Digit: String;


//длина текста зависит от переменной i
//если не хватает integer, то объявляйте, как int64
  i: integer;


  HByte: Byte;
  Len: Byte;
begin
  Result := '';
  Len := 0;
  if Value = '' then Exit;
  for i := 1 to Length(Value) do
  begin
    if Len > 0 then
    begin
      Digit := Digit + Value[i];
      Dec(Len);
      if Len = 0 then
        Result := Result + UTF8ToStr(Digit);
    end else
    begin
      HByte := Ord(Value[i]);
      if HByte in [$00..$7f] then       //Standart ASCII chars
        Result := Result + Value[i]
      else begin
        //Get length of UTF-8 char
        if HByte and $FC = $FC then
          Len := 6
        else if HByte and $F8 = $F8 then
          Len := 5
        else if HByte and $F0 = $F0 then
          Len := 4
        else if HByte and $E0 = $E0 then
          Len := 3
        else if HByte and $C0 = $C0 then
          Len := 2
        else begin
          Result := Result + Value[i];
          Continue;
        end;
        Dec(Len);
        Digit := Value[i];
      end;
    end;
  end;
end;
Использование
Код:
procedure TForm6.Button2Click(Sender: TObject);
var M:TStringStream;
begin
   Button2.Caption := 'Работаю';
   M := TStringStream.Create('');
   Memo1.Lines.Clear;
   IdHTTP1.Get(Edit2.Text, m);
   Memo1.lines.Text := UTF8ToStrSmart(m.DataString);
   M.Free;
   Button2.Caption := 'готово';
end;
X11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idHTTP и кодировка FAiver Работа с сетью в Delphi 2 09.09.2012 16:47
Кодировка Nixtone Помощь студентам 4 27.05.2008 14:12
Кодировка psp Общие вопросы Delphi 7 01.04.2008 19:18
Кодировка satana Общие вопросы Delphi 1 20.12.2007 02:53