URI encoding кириллицы. Как?
От: artemu78  
Дата: 20.05.10 07:51
Оценка:
В 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 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.
Re: URI encoding кириллицы. Как?
От: alxn1 Россия  
Дата: 20.05.10 08:12
Оценка:
Здравствуйте, 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 символы). Как-то так.
Re: URI encoding кириллицы. Как?
От: BlackEric http://black-eric.lj.ru
Дата: 20.05.10 08:27
Оценка:
Здравствуйте, 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 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.


Пробел нужно заменить на %20
https://github.com/BlackEric001
Re: URI encoding кириллицы. Как?
От: Dimonka Верблюд  
Дата: 20.05.10 09:06
Оценка:
Здравствуйте, 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/..).
Re: отвечаю сам себе
От: artemu78  
Дата: 20.05.10 11:03
Оценка:
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;
Re[2]: отвечаю сам себе
От: alxn1 Россия  
Дата: 20.05.10 12:06
Оценка: 1 (1)
Здравствуйте, 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-ти байт.
Re: URI encoding кириллицы. Как?
От: HAS Россия hasalex@mail.ru
Дата: 26.05.10 22:48
Оценка:
Здравствуйте, 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 закодировать корректный запрос к веб серверу на получение файла с кириллицей в названии.



uses httpapp;


string codedurl = httpencode(url);


все уже в делфе есть
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.