Разработчики, использующие язык программирования Pascal и среду разработки Delphi, часто сталкиваются с необходимостью работы с веб-сервисами. Одной из распространённых задач является корректное получение и обработка JSON-ответов, содержащих символы с акцентами. В данной статье мы рассмотрим, как решить эту проблему, используя компоненты Indy, которые являются стандартным решением для работы с HTTP-запросами в Delphi.
Result := '';
IdHTTP := TIdHTTP.Create;
IdHTTP.Request.MethodOverride := 'ForwardCommand';
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmClient;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdHTTP.HandleRedirects := True;
IdHTTP.Response.ContentEncoding := 'UTF-8'; // Установка кодировки не решает проблему
try
url := 'testappUrl';
try
IdHTTP.ConnectTimeout := 2000;
IdHTTP.ReadTimeout := 4000;
Response := IdHTTP.Get(url);
ShowMessage(response);
except
on E:Exception do
begin
// Обработка исключений
end;
end;
Result := response;
finally
IdHTTP.Free;
end;
Решение
Чтобы корректно обработать JSON-ответ, необходимо использовать поток TStringStream с указанием кодировки UTF-8. Пример кода, который решает проблему:
var
ts: TStringStream;
begin
...
ts := TStringStream.Create(string.Empty, TEncoding.UTF8);
IdHTTP.Get('url', ts);
ShowMessage(ts.DataString);
// или
ShowMessage(ts.ToString);
...
end;
Использование TStringStream с заданной кодировкой позволяет Indy автоматически декодировать ответ в соответствии с указанной кодировкой, что и позволяет корректно обработать акцентные символы.
Дополнительная информация
Для тех, кто использует библиотеку Indy, стоит отметить, что существует ветка http-json-charset, которая исправляет проблему с корректной обработкой JSON как UTF-8 кодировки.
Заключение
При работе с JSON-ответами в Delphi, важно правильно обрабатывать кодировку ответа, чтобы избежать проблем с отображением акцентных символов. Использование TStringStream с указанием кодировки UTF-8 является эффективным решением данной проблемы.
Проблема: Разработчикам в Delphi необходимо корректно обработать JSON-ответ с акцентными символами, используя компоненты Indy для работы с HTTP-запросами.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS