Есть строка вида "111%D1%80%d1%8022.png". На диске этот файл имеет название 111рр22.png (между цифрами рр - кириличные буквы).
Есть готовый инструмент перевода первой строки во вторую?
[Решено]Преобразование Percent-encoding кодировки в UTF8.
Модератор: Модераторы
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
[Решено]Преобразование Percent-encoding кодировки в UTF8.
Последний раз редактировалось GAMER 15.04.2019 14:03:11, всего редактировалось 1 раз.
- serbod
- постоялец
- Сообщения: 449
- Зарегистрирован: 16.09.2016 10:03:02
- Откуда: Минск
- Контактная информация:
Это Percent-encoding, который не имеет отношения к JSON и обычно используется в URL.
В библиотеках для работы с HTTP есть кодеки:
Indy:
Synapse:
Ну и более развернуто - https://stackoverflow.com/questions/776302/standard-url-encode-function
В библиотеках для работы с 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
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Есть и нативная функции из либы fcl-web в модуле FPHTTPClient.
Код: Выделить всё
Function DecodeURLElement(Const S : String) : String;- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Кстати, хоть и написал, что решено, но по факту, что-то с кодировками не так. Вывожу выхлоп в Caption формы, вместо кирилицы вопросительные знаки.
Добавлено спустя 2 минуты 45 секунд:
Этот вариант, в отличии от Инди сработал как нужно.
Добавлено спустя 2 минуты 45 секунд:
Ichthyander писал(а):Есть и нативная функции из либы fcl-web в модуле FPHTTPClient.Код: Выделить всё
Function DecodeURLElement(Const S : String) : String;
Этот вариант, в отличии от Инди сработал как нужно.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
GAMER писал(а):Этот вариант, в отличии от Инди сработал как нужно.
Ну в случае инди и синапсе там тоже надо было decode функции заюзать, а не encode. А вообще, правильно выбрать нативную функцию при всех прочих равных условиях. Так что все ок
