Эт я использовал в своей проге SmsDgs (геморно конечно сделано, но все же)

baza := '%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%B9%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8B%D1%8C%D1%8D%D1%8E%D1%8F%D0%90%D0%91%D0%92%D0%93%D0%94%D0%95%D0%81%D0%96%D0%97%D0%98%D0%99%D0%9A%D0%9B%D0%9C%D0%9D%D0%9E%D0%9F%D0%A0%D0%A1%D0%A2%D0%A3%D0%A4%D0%A5%D0%A6%D0%A7%D0%A8%D0%A9%D0%AA%D0%AB%D0%AC%D0%AD%D0%AE%D0%AF';
alf := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
for i := 0 to 65 do
begin
rus_alf[i] := getchar(alf, i);
rus_mess[i] := copy(baza, n, n+6);
n:= n+6;
end;
// поехали :-D
for i := 0 to length(message)-1 do
begin
for n:=0 to 65 do
begin
if getchar(message,i) = rus_alf[n] then
begin
message_m := message_m + rus_mess[n] ;
z:=1;
end;
else z:=z+0;
end;
if z = 0 then
begin
message_m := message_m + getchar(message, i);
end;
if getchar(message,i) = chr(ord(' ')) then message_m := message_m + '%20' ;
if getchar(message,i) = chr(ord('.')) then message_m := message_m + '%2E' ;
if getchar(message,i) = chr(ord(',')) then message_m := message_m + '%2C' ;
if getchar(message,i) = chr(ord('!')) then message_m := message_m + '%21' ;
if getchar(message,i) = chr(ord(':')) then message_m := message_m + '%3A' ;
if getchar(message,i) = chr(ord(';')) then message_m := message_m + '%3B' ;
if getchar(message,i) = chr(ord('(')) then message_m := message_m + '%28' ;
if getchar(message,i) = chr(ord(')')) then message_m := message_m + '%29' ;
if getchar(message,i) = chr(ord('=')) then message_m := message_m + '%3D' ;
if getchar(message,i) = chr(ord('+')) then message_m := message_m + '%2B' ;
if getchar(message,i) = chr(ord('$')) then message_m := message_m + '%24' ;
if getchar(message,i) = chr(ord('#')) then message_m := message_m + '%23' ;
if getchar(message,i) = chr(ord('%')) then message_m := message_m + '%25' ;
if getchar(message,i) = chr(ord('&')) then message_m := message_m + '%26' ;
if getchar(message,i) = chr(ord('?')) then message_m := message_m + '%3F' ;
if getchar(message,i) = chr(ord('"')) then message_m := message_m + '%22' ;
if getchar(message,i) = chr(ord('/')) then message_m := message_m + '%2F' ;
if getchar(message,i) = chr(ord('\')) then message_m := message_m + '%5C' ;
if getchar(message,i) = chr(ord('[')) then message_m := message_m + '%5B' ;
if getchar(message,i) = chr(ord(']')) then message_m := message_m + '%5D' ;
if getchar(message,i) = chr(ord('{')) then message_m := message_m + '%7B' ;
if getchar(message,i) = chr(ord('}')) then message_m := message_m + '%7D' ;
if getchar(message,i) = chr(ord('@')) then message_m := message_m + '%40' ;
if getchar(message,i) = chr(ord('<')) then message_m := message_m + '%3C' ;
if getchar(message,i) = chr(ord('>')) then message_m := message_m + '%3E' ;
if getchar(message,i) = chr(ord('0')) then message_m := message_m + '0' ;
if getchar(message,i) = chr(ord('1')) then message_m := message_m + '1' ;
if getchar(message,i) = chr(ord('2')) then message_m := message_m + '2' ;
if getchar(message,i) = chr(ord('3')) then message_m := message_m + '3' ;
if getchar(message,i) = chr(ord('4')) then message_m := message_m + '4' ;
if getchar(message,i) = chr(ord('5')) then message_m := message_m + '5' ;
if getchar(message,i) = chr(ord('6')) then message_m := message_m + '6' ;
if getchar(message,i) = chr(ord('7')) then message_m := message_m + '7' ;
if getchar(message,i) = chr(ord('8')) then message_m := message_m + '8' ;
if getchar(message,i) = chr(ord('9')) then message_m := message_m + '9' ;