[Решено]Преобразование Percent-encoding кодировки в UTF8.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

[Решено]Преобразование Percent-encoding кодировки в UTF8.

Сообщение GAMER »

Есть строка вида "111%D1%80%d1%8022.png". На диске этот файл имеет название 111рр22.png (между цифрами рр - кириличные буквы).
Есть готовый инструмент перевода первой строки во вторую?
Последний раз редактировалось GAMER 15.04.2019 14:03:11, всего редактировалось 1 раз.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

Это Percent-encoding, который не имеет отношения к JSON и обычно используется в URL.

В библиотеках для работы с HTTP есть кодеки:

Indy:

Код: Выделить всё

uses
  IdURI;

..
begin
  S := TIdURI.URLEncode(str);
//
  S := TIdURI.URLDecode(str);
end;


Synapse:

Код: Выделить всё

uses
  SynaCode;
..
begin
  s := EncodeUrl( str );
//
  s := DecodeUrl( str );
end;


Ну и более развернуто - https://stackoverflow.com/questions/776302/standard-url-encode-function
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Спасибо. Не знал, как этот термин называется, по аналогии с json подумал. Подправлю тему.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Есть и нативная функции из либы fcl-web в модуле FPHTTPClient.

Код: Выделить всё

Function DecodeURLElement(Const S : String) : String;
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Кстати, хоть и написал, что решено, но по факту, что-то с кодировками не так. Вывожу выхлоп в Caption формы, вместо кирилицы вопросительные знаки.

Добавлено спустя 2 минуты 45 секунд:
Ichthyander писал(а):Есть и нативная функции из либы fcl-web в модуле FPHTTPClient.

Код: Выделить всё

Function DecodeURLElement(Const S : String) : String;

Этот вариант, в отличии от Инди сработал как нужно.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

GAMER писал(а):Этот вариант, в отличии от Инди сработал как нужно.

Ну в случае инди и синапсе там тоже надо было decode функции заюзать, а не encode. А вообще, правильно выбрать нативную функцию при всех прочих равных условиях. Так что все ок
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

decode использовал. И отрабатывал он по идее правильно, просто символ непонятно в какую кодировку загонял.
Ответить