В Delphi (7.0) иногда приходится отправлять HTTP Request, получить файл с сервера, но некоторые файлы содержат кириллицу в названии. Поэтому необходимо перекодировать РУССКИЕ БУКВЫ в %D0%A0%D0%A3%D0%A1%D0%A1%D0%9A%D0%98%D0%95%20%D0%91%D0%A3%D0%9A%D0%92%D0%AB
А вот как это сделать — не знаю. Пробовал пару алгоритмов из сети, но они почему то оставляют нетронутым пробел и это большая проблема.
Подскажите как из Delphi 7.0 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.
Здравствуйте, artemu78, Вы писали:
A>В Delphi (7.0) иногда приходится отправлять HTTP Request, получить файл с сервера, но некоторые файлы содержат кириллицу в названии. Поэтому необходимо перекодировать РУССКИЕ БУКВЫ в %D0%A0%D0%A3%D0%A1%D0%A1%D0%9A%D0%98%D0%95%20%D0%91%D0%A3%D0%9A%D0%92%D0%AB
A>А вот как это сделать — не знаю. Пробовал пару алгоритмов из сети, но они почему то оставляют нетронутым пробел и это большая проблема.
A>Подскажите как из Delphi 7.0 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.
Я делал так:
1) кодировал строку в UTF8, если она уже не в UTF8
2) проходился по строке, и если какой-либо символ (за символ я брал один байт) не являлся латинским или цифрой ('a'-'z' or 'A'-'Z' or '0'-'9') заменял его на последовательность '%XX', где XX — шестнадцатеричное представление этого байта
Вроде как работало правильно, только, по-моему, список допустимы символов (которые не нужно кодировать) можно расширить (добавить всякие минусы, плюсы, дефисы и прочие допустимые в URI символы). Как-то так.
Здравствуйте, artemu78, Вы писали:
A>В Delphi (7.0) иногда приходится отправлять HTTP Request, получить файл с сервера, но некоторые файлы содержат кириллицу в названии. Поэтому необходимо перекодировать РУССКИЕ БУКВЫ в %D0%A0%D0%A3%D0%A1%D0%A1%D0%9A%D0%98%D0%95%20%D0%91%D0%A3%D0%9A%D0%92%D0%AB
A>А вот как это сделать — не знаю. Пробовал пару алгоритмов из сети, но они почему то оставляют нетронутым пробел и это большая проблема.
A>Подскажите как из Delphi 7.0 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.
Здравствуйте, artemu78, Вы писали:
A>В Delphi (7.0) иногда приходится отправлять HTTP Request, получить файл с сервера, но некоторые файлы содержат кириллицу в названии. Поэтому необходимо перекодировать РУССКИЕ БУКВЫ в %D0%A0%D0%A3%D0%A1%D0%A1%D0%9A%D0%98%D0%95%20%D0%91%D0%A3%D0%9A%D0%92%D0%AB
A>А вот как это сделать — не знаю. Пробовал пару алгоритмов из сети, но они почему то оставляют нетронутым пробел и это большая проблема.
A>Подскажите как из Delphi 7.0 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.
По-моему во всех интернет компонентах есть функции типа UREncode/URIDecode. Посмотри справку к тому, чем ты пользуешься (Indy/ICS/..).
function GetURIEncodedString(original : string): string;
var
i : integer;
CurrentCharOfString : UTF8String;
begin
result := '';
//цикл по оригинальной строке
for i:=1 to length(original) do
begin
//каждый символ кодируем в UTF8
CurrentCharOfString := UTF8Encode(original[i]);
//берём первый символ, получаем его ASCII код и переводим в шестнадцатиричный формат и ставим в начале символ %, также со вторым символом
result := result + '%' + IntToHex(Ord(CurrentCharOfString[1]),2) + '%' + IntToHex(Ord(CurrentCharOfString[2]),2);
end;
end;
Здравствуйте, artemu78, Вы писали:
A>function GetURIEncodedString(original : string): string; A>var A> i : integer; A> CurrentCharOfString : UTF8String; A>begin A> result := ''; A> //цикл по оригинальной строке A> for i:=1 to length(original) do A> begin A> //каждый символ кодируем в UTF8 A> CurrentCharOfString := UTF8Encode(original[i]); A> //берём первый символ, получаем его ASCII код и переводим в шестнадцатиричный формат и ставим в начале символ %, также со вторым символом A> result := result + '%' + IntToHex(Ord(CurrentCharOfString[1]),2) + '%' + IntToHex(Ord(CurrentCharOfString[2]),2); A> end; A>end;
А почему считается, что в UTF8 символ 2 байта занимает? Это ни разу не правильно. UTF8 символ может занимать от 1-го до 6-ти байт.
Здравствуйте, artemu78, Вы писали:
A>В Delphi (7.0) иногда приходится отправлять HTTP Request, получить файл с сервера, но некоторые файлы содержат кириллицу в названии. Поэтому необходимо перекодировать РУССКИЕ БУКВЫ в %D0%A0%D0%A3%D0%A1%D0%A1%D0%9A%D0%98%D0%95%20%D0%91%D0%A3%D0%9A%D0%92%D0%AB
A>А вот как это сделать — не знаю. Пробовал пару алгоритмов из сети, но они почему то оставляют нетронутым пробел и это большая проблема.
A>Подскажите как из Delphi 7.0 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.