![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() столкнулся с ситлуацией при работе с idhttp.get, если страница на домене рф например http://нигма.рф/ то в браузерной строке так и отображается, а в снифере выглядит так Http://xn--80aforc.xn--p1ai , но при
Код:
idhttp.get('http://нигма.рф/'); |
#2
|
||||
|
||||
![]() punycode это называется.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
![]() спс, нашёл функцию для работы с punycode, но как именно заведомо узнать русский домен стоит в
Код:
idhttp.get(''+FURL); Код:
function BuildACE(IDN:WideString):WideString; var a, resturl:WideString; I:Integer; Liste: TStringlist; function EncodeToACE(IDN:WideString):WideString; const base = 36; tmin = 1; tmax = 26; skew = 38; damp = 700; initial_bias = 72; initial_n = 128; Var Output, Input: WideString; I,n,bias,k, t, delta, h, b,m, m2,c,q :Integer; Aceneeded: Boolean; function adapt(delta,numpoints:Integer; firsttime:boolean):Integer; Var K:Integer; begin if firsttime then delta := (delta div damp) else delta := (delta div 2); delta := (delta + (delta div numpoints) ); k := 0; while (delta > ((base - tmin) * tmax) div 2) do begin delta := (delta div (base - tmin)); k := (k + base); end; result:= (k + (((base - tmin + 1) * delta) div (delta + skew))); end; function encodedigit(Value:Integer):Integer; begin if Value < 26 then result:=Value + 22 + 75 else if (Value < 36) and (Value > 25) then result:=Value +22 else result:=Value + 22 +75 * 1 - 5; end; begin AceNeeded:=false; For I:=1 to length(IDN) do if ((IDN[i]) > #$80) then Aceneeded:=True; If not aceNeeded then begin result:=IDN; exit; end; n := initial_n; bias := initial_bias; output :='xn--'; Input:=(IDN); delta := 0; h:=0; b:=0; For I:=1 to length(input) do if ( Char(Input[i]) < #$80 ) then begin Output:=Output+Input[i]; inc(h); inc(b); end; if b > 0 then output:=output+Char(45); m:=maxint; while h < length(input) do begin m:=maxint; For I:= 0 to length(Input)-1 do begin m2:=ord(Input[I+1]); if (m2 < m) and (m2 >= n) then m:=m2; end; delta := delta + (m - n) * (h + 1); n := m; for I:=0 to length(input)-1 do begin c:=ord(input[i+1]); if (c < n) or (char© < #$80 ) then inc(delta); if c = n then begin q := delta; k:=base; repeat if k <= bias then t := tmin else if k >= bias + tmax then t := tmax else t := k - bias; if q < t then break; Output := Output + Char(encodedigit ((t + (q - t) mod (base - t)))); q := ((q - t) div (base - t)); inc(k,base); until application.terminated; output := Output + Char(Encodedigit(q)); bias := adapt(delta, h + 1,( h = b )); delta := 0; inc(h); end; // c=n end; // for loop inc(delta); inc(n); end; // while h< result:=output; end; begin Liste:=TStringlist.Create; Liste.Delimiter:='.'; try a:=IDN; I:=Posex('/',a,9); resturl:=Copy(a,I,length(a)); a:=Leftstr(a,i-1); a:=Stringreplace(a,'http://','',[]); liste.DelimitedText:=a; for I:=0 to liste.Count-2 do liste[i]:=EncodeToAce((liste[i])); A:=''; for I:=0 to liste.Count-1 do A:=A+(liste[i])+'.'; result:='http://'+Leftstr(A,length(a)-1)+resturl; finally Liste.free; end; Последний раз редактировалось bulldog, 14.02.2011 в 21:55. |