Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

русский язык в Html и Delphi   Найти похожие ветки 

 
Accel   (2007-05-17 14:12) [0]

Добрый день!

может замечали, если в яндексе ищем слово на английском, например, oleg, то получаем:
http://www.yandex.ru/yandsearch?text=oleg
а если ищём олег - по-русски, то получается:
http://www.yandex.ru/yandsearch?text=%EE%EB%E5%E3

Тоесть %EE%EB%E5%E3 = олег.

Вопрос в том, как при помощи Delphi преобразовывать %EE%EB%E5%E3 в читаемый русский язык.
Заранее спасибо!!!


 
Megabyte ©   (2007-05-17 14:18) [1]

Парсишь строку парметров: % - разделитель символов и сами ASCII-коды в 16-чной системе счисления


 
Accel   (2007-05-17 15:43) [2]

эээ, а по-русски.


 
Megabyte ©   (2007-05-17 15:59) [3]

Парсить - разбирать
ASCII-коды - код символа согласно ASCII

Если и сейчас не понял, то забей на эту задачу...


 
Accel   (2007-05-17 16:10) [4]

Окей, если я правильно понял, сопоставлять 16-ричные коды из этой строки таблице кодов ASCII, принимая, как разделитель кодов символ "%"
Это ясно, вот как сопоставлять коды - в этом вопрос?
написать
EE = о
EB = л ... и т.д.? или есть стандартная функция для этого?


 
Megabyte ©   (2007-05-17 16:32) [5]

Функция chr - по коду выдает символ! Только не забудь, что у тебя 16-тиричный код.


 
Accel   (2007-05-17 17:17) [6]

Всё получилось:

procedure TForm1.Button1Click(Sender: TObject);
var s,res:String;
begin
 s:=Edit1.Text; //  исходный 16-ричный код от браузера

 while pos("%",s)>0 do delete(s, pos("%",s),1); // удаляем все разделительные знаки "%"
 while pos("+",s)>0 do // заменяем знаки "+" в строке на "20" - пробел в ascii
 begin
 insert("20",s,pos("+",s));
 delete(s, pos("+",s),1);
 end;

 SetLength(res,round(Length(s)/2)); // устанавливаем длину буфера res равной половине от исходной последовательности ascii (т.к. там 2 символа кодируют один)
 HexToBin(PChar(s),PChar(res),Length(s)); // преобразуем 16-ричную последовательность в обычный текст
 Edit2.Text:=res;  // выводим результаты
end;


 
G_M_S ©   (2007-05-17 17:47) [7]

Господа, все уже сделано до вас.

Смотрите в сторону Indy. Подключаете юнит IdURI и пишете такое:

s := TidURI.ParamsEncode("Олег");

получаете в переменную "s" соотв. строку. Обратно там же ParamsDecode.

ЗЫ: у меня TD 2006, в Дельфи 6/7, как мне помнится, была старая Инди, где отдельным компонентом кодер URI был на панельке Indy Misc, хотя я его могу путать с другими кодерами/декодерами, коих там ДОФИГА, попрошу заметить.


 
Megabyte ©   (2007-05-17 17:50) [8]


> G_M_S ©  (17.05.07 17:47) [7]

Не мешайте человеку учиться :)


 
Accel   (2007-05-17 18:04) [9]

Про indy интересно, спасибо!
Но я пишу диплом и поэтому стараюсь всё сам делать, чем нагрузить кучу готовых компонентов, накидать на форму и радоваться.


 
Anatoly Podgoretsky ©   (2007-05-17 18:44) [10]

> Accel  (17.05.2007 18:04:09)  [9]

Тогда тебе нужен Winsock API


 
G_M_S ©   (2007-05-17 19:19) [11]


> Не мешайте человеку учиться :)

Как раз надо учиться использовать готовые наработки - иначе при написании ПО легко погрязнуть в изобретении велосипеда...


 
Accel   (2007-05-17 22:27) [12]

Спасибо всем за помощь!!!



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
2-1179650441
dima2207
2007-05-20 12:40
2007.06.10
запуск приложения .


2-1179774236
Познающий
2007-05-21 23:03
2007.06.10
Окантовка текста


3-1174902008
Цукор5
2007-03-26 13:40
2007.06.10
создание базы с логическим полем


11-1160674421
ANTPro
2006-10-12 21:33
2007.06.10
Минимальное приложение/dll на KOL


2-1179477760
ЗфдЗфднср
2007-05-18 12:42
2007.06.10
запрос в Paradox