 
			
				14.02.2011, 13:36
			
			
			
		  
	 | 
	
		
		
		
			
			| 
			
				
				
				 Начинающий 
				
				
			 | 
			  | 
			
				
				
					Регистрация: 10.05.2010 
					
					
					Сообщения: 160
 
				
					Репутация: 14 
					    
				 
				
			 | 
		 
		 
		
	 | 
	
	
	
		
			
			
				 
				
			 
			 
			
		
		
		
		спс, нашёл функцию для работы с punycode, но как именно заведомо узнать русский домен стоит в  
или нет, сама функция вот
 
	Код: 
	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; 
 
P.S. вопрос снят, разобрался  
		
	
		
		
		
		
		
		
						  
				
				Последний раз редактировалось bulldog, 14.02.2011 в 21:55.
				
				
			
		
		
	
		
		
	
	
	 |