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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2017, 18:31   #11
Slavutich_RED
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 10
По умолчанию

Подскажите плиз:
Delphi XE10,
memo1.Lines.Add(ansitoutf8(LbEdit2. Text)) - отлично работает (преобразует в ютф кодированую строку, без проблем потом запросом через инди отправляю на сайт ...
а вот StrPageUtf:=ansitoutf8(LbEdit2.Text ) на отрез не работает - ошибку не выдает, но текст остается в анси, при этом переменную StrPageUtf пробовал обявлять и как utf8strig, и как widestring, но результат одинаково отрицательный
Slavutich_RED вне форума Ответить с цитированием
Старый 15.12.2017, 18:44   #12
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Slavutich_RED Посмотреть сообщение
ansitoutf8(LbEdit2.Text)
фигня какая-то, у вас и так не ansi там если XE10.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.12.2017, 23:01   #13
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
Ship_1
На всякий случай вот код функции URLCode (может, в ней чего не то, хотя браузером ссылка воспринимается адекватно и idHTTP данные грузит)
Попробуйте этот код для XE кодирует кириллицу и знаки в URLCode

Код:
Function UrlEncode(Str: Ansistring): Ansistring;
  function CharToHex(Ch: AnsiChar): Integer;
  asm
    and eax, 0FFh
    mov ah, al
    shr al, 4
    and ah, 00fh
    cmp al, 00ah
    jl @@10
    sub al, 00ah
    add al, 041h
    jmp @@20
@@10:
    add al, 030h
@@20:
    cmp ah, 00ah
    jl @@30
    sub ah, 00ah
    add ah, 041h
    jmp @@40
@@30:
    add ah, 030h
@@40:
    shl eax, 8
    mov al, '%'
  end;

var
  i, Len: Integer;
  Ch: AnsiChar;
  N: Integer;
  P: PAnsiChar;
begin
  Result := '';
  Len := Length(Str);
  P := PAnsiChar(@N);
  for i := 1 to Len do
  begin
    Ch := Str[i];
    if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_', ':', '/', '.'] then
      Result := Result + Ch
    else
    begin
      if Ch = ' ' then
        Result := Result + '+'
      else
      begin
        N := CharToHex(Ch);
        Result := Result + P;
      end;
    end;
  end;
end;
использовать так
Код:
idHTTP1.Get(UrlEncode('http://privet.ru/search/music/?go=1&query=ЗапросКириллицей&ss=music'));

а этот код раскодирует в XE кириллицу
Код:
function UrlDecode(Str: AnsiString): AnsiString;
  function HexToChar(W: word): AnsiChar;
  asm
   cmp ah, 030h
   jl @@error
   cmp ah, 039h
   jg @@10
   sub ah, 30h
   jmp @@30
@@10:
   cmp ah, 041h
   jl @@error
   cmp ah, 046h
   jg @@20
   sub ah, 041h
   add ah, 00Ah
   jmp @@30
@@20:
   cmp ah, 061h
   jl @@error
   cmp al, 066h
   jg @@error
   sub ah, 061h
   add ah, 00Ah
@@30:
   cmp al, 030h
   jl @@error
   cmp al, 039h
   jg @@40
   sub al, 030h
   jmp @@60
@@40:
   cmp al, 041h
   jl @@error
   cmp al, 046h
   jg @@50
   sub al, 041h
   add al, 00Ah
   jmp @@60
@@50:
   cmp al, 061h
   jl @@error
   cmp al, 066h
   jg @@error
   sub al, 061h
   add al, 00Ah
@@60:
   shl al, 4
   or al, ah
  // ret
 jmp @@end
@@error:
 xor al, al
@@end:
CMP al, al
  end;

function GetCh(P: PAnsiChar; var Ch: AnsiChar): AnsiChar;
  begin
    Ch := P^;
    Result := Ch;
 end;

var
  P: PAnsiChar;
  Ch: AnsiChar;
begin
  Result := '';
  P := @Str[1];
  while GetCh(P, Ch) <> #0 do
  begin
    case Ch of
      '+': Result := Result + ' ';
      '%':
        begin
          Inc(P);
          Result := Result + HexToChar(PWord(P)^);
          Inc(P);
        end;
    else
      Result := Result + Ch;
    end;
    Inc(P);
  end;
end;
использовать так
Код:
Edit2.Text:=UrlDecode('http://privet.ru/search/music/%3Fgo%3D1%26query%3D%C7%E0%EF%F0%EE%F1%CA%E8%F0%E8%EB%E8%F6%E5%E9%26ss%3Dmusic'));

Последний раз редактировалось Aliens_wolfs; 16.12.2017 в 01:33.
Aliens_wolfs вне форума Ответить с цитированием
Старый 17.12.2017, 17:50   #14
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
utf8toansi не работает в DelphiXE?
Работает нормально, чтобы проверить используйте функции что я написал.

Код:
Edit1.Text:='http://privet.ru/search/music/?go=1&mode=all&query=' + UrlEncode(AnsiToUtf8('Алиса')) + '&style=0&sort=relevance';
ShellExecute(Handle, 'open', 'IEXPLORE.EXE', StringToOleStr(Edit1.Text), nil, SW_SHOWNORMAL);
Edit2.Text:=Utf8toAnsi(UrlDecode(Edit1.Text));

Последний раз редактировалось Aliens_wolfs; 17.12.2017 в 18:01.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает анимация. Механизм работает лишь при изменения числа в едит1. Студент ММИ Помощь студентам 1 18.05.2015 07:39
Ошибка "cannot resolve unit name" при переносе проекта с Delphi7 на DelphiXE Ferkel Общие вопросы Delphi 1 16.06.2012 13:01
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
QuickReport for DelphiXE ArtGrek Компоненты Delphi 1 14.10.2011 13:00
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56