PLSQL. UTL_HTTP package. Sending cyrillic chars

Если Вы используете встроенный пакет utl_http, то возможно Вы сталкивались с проблемой кодировок при отправке текстовых данных на кириллице. Для решения данной проблемы необходимо воспользоваться методов escape встроенного пакета utl_url:

utl_url.escape('Привет, мир!', true, 'utf-8')

Данный метод возвращает строку, готовую к отправке. Ниже приведен пример:

declare
  req utl_http.req;
  res utl_http.resp;
  url varchar2(4000) := 'http://some_address:port?test=1';
  l_data varchar2(100);
begin
  l_data := 'Привет, мир!';

  l_data := utl_url.escape(l_data, true, 'utf-8');

  utl_http.set_response_error_check(false);
  req := utl_http.begin_request(url, 'POST', 'HTTP/1.1');
 
  /* if need proxy connection
  utl_http.set_proxy('company.proxy.com:port', '');
  utl_http.set_authentication(req, 'user', 'password', for_proxy => true);
  */
 
  utl_http.set_header(req, 'Content-Type', 'charset=UTF-8');
  utl_http.set_header(req, 'Content-Length', length(l_data));
  utl_http.set_header(req, 'Content-Encoding', 'UTF-8');

  -- send post data
  utl_http.write_text(req, l_data);
  res := utl_http.get_response(req);
  utl_http.end_response(res);

  /* if need check status code
  res.status_code
  */

  exception
    when utl_http.end_of_body then
      utl_http.end_response(res);
    when others then
      dbms_output.put_line(sqlerrm);
end;