В этой статье будет пошагово описано создание на Delphi приложение
Урок 2.
Преобразование кодировок (URLEncode, function)
Если в Яндексе или в какой либо другой поисковой системе мы
наберем запрос на английском языке, то он преобразует его в нечто вроде (запрос
по сочетанию simple quetion)
http://yandex.ru/yandsearch?text=simple%20quetion
А теперь попробуем набрать запрос по русский
(сочетание: пробный запрос):
http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+%D0%B7%D0%B0
%D0%BF%D1%80%D0%BE%D1%81&stpar2=%2Fh1%2Ftm121%2Fs1&stpar4=%2Fs1&stpar1=%2Fu0
Как видим, русские буквы превращаются во
всякую "абракадабру". Очевидно, нам нужно преобразовывать нормальный текст в эту
"абракадабровскую" кодировку:
function DigitToHex(Digit: Integer): Char;
begin
case Digit of
0..9: Result := Chr(Digit + Ord('0'));
10..15: Result := Chr(Digit - 10 + Ord('A'));
else
Result := '0';
end;
end; // DigitToHex
function URLEncode(const S: string): string;
var
i, idx, len: Integer;
begin
len := 0;
for i := 1 to Length(S) do
if ((S[i] >= '0') and (S[i] <= '9')) or
((S[i] >= 'A') and (S[i] <= 'Z')) or
((S[i] >= 'a') and (S[i] <= 'z')) or (S[i] = ' ') or
(S[i] = '_') or (S[i] = '*') or (S[i] = '-') or (S[i] = '.') then
len := len + 1
else
len := len + 3;
SetLength(Result, len);
idx := 1;
for i := 1 to Length(S) do
if S[i] = ' ' then
begin
Result[idx] := '+';
idx := idx + 1;
end
else if ((S[i] >= '0') and (S[i] <= '9')) or
((S[i] >= 'A') and (S[i] <= 'Z')) or
((S[i] >= 'a') and (S[i] <= 'z')) or
(S[i] = '_') or (S[i] = '*') or (S[i] = '-') or (S[i] = '.') then
begin
Result[idx] := S[i];
idx := idx + 1;
end
else
begin
Result[idx] := '%';
Result[idx + 1] := DigitToHex(Ord(S[i]) div 16);
Result[idx + 2] := DigitToHex(Ord(S[i]) mod 16);
idx := idx + 3;
end;
end; // URLEncode
|
Теперь протестируем функцию URLEncode.
Для этого на форму добавим два текстовых поля (TEdit):
edDecode и edEncode, а так же кнопку
btnEncode. Напишем обработчик события OnClick этой
кнопки:
procedure
TfrmMain.btnEncodeClick(Sender: TObject);
begin
edEncode.Text:=URLEncode(edDecode.Text);
end; |
Теперь испытаем программу:
Посмотрим, что нам Яндекс выдаст по этому
запросу*:
А теперь просто наберем в Яндексе "Пробный
запрос"*:
Как видим, Яндекс нашел тоже самое.
Скриншоты, помеченные знаком *,
являются цитатами и иллюстрациями в
соответствии со ст. 1274 ГК РФ программного
продукта "Microsof Internet Explorer", авторское
право на который принадлежит корпорации
Microsoft
|