{$codepage utf8} Function BusquedaCadena(patron,cad:unicodestring; var pos:longword):boolean; Var abecedario:array [0..65535] of word; //Todo el BMP UTF16 i,j,k:longword; c:Widechar; Begin pos:=0; for i:= 0 to 65535 do abecedario[i]:=length(patron); for i:=1 to length(patron)-1 do abecedario[ord(patron[i])]:=length(patron)-i; BusquedaCadena:=false; i:=length(patron); j:=i; k:=i; c:=cad[k]; while (j>0) and (k<=length(cad)) do begin if patron[j] <> cad[i] then begin //si hay discrepancia saltar segun abecedario k:=k+abecedario[ord(c)]; i:=k; c:=cad[k]; j:=length(patron) end else begin //caso contrario comparar hacia atras. i:=i-1;j:=j-1 end End; if j=0 then begin pos:=i+1; BusquedaCadena:=true end; End; Var cad,patron:unicodestring; pos:longword; Begin cad:='Hola en japones se escribe asi: こんにちは '; patron:='こんにちは'; if BusquedaCadena(patron,cad,pos) then Writeln('Se encontro en : ',pos) else Writeln('no se encontro') End.