Кодировка испортилась при использовании CL_HTTP_CLIENT - PullRequest
0 голосов
/ 08 мая 2020

Я делаю http-запрос в ABAP следующим образом:

    CALL METHOD cl_http_client=>create_by_url
      EXPORTING
        URL    = url
      IMPORTING
        client = client.

    client->request->set_header_field(
      name  = 'Content-Type'
      value = 'application/json; charset=utf-8'
    ).

    client->send(
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3
        http_invalid_timeout       = 4
        OTHERS                     = 5
    ).

    CHECK sy-subrc = 0.

    client->receive(
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3
        OTHERS                     = 4
    ).

    string_response = client->response->get_cdata( ).

string_response кодируется неправильно, данные должны быть, например, "{"CompanyName": "Uberlândia"}", но я получаю "{"CompanyName": "Uberlândia"}", даже когда я передаю 'application / json; charset = utf-8 ' в заголовке запроса 'Content-Type'

1 Ответ

2 голосов
/ 09 мая 2020

Возможно, ответ закодирован в UTF-8, но не упомянут в HTTP-ответе.

Таким образом, вам придется использовать get_data вместо get_cdata в переменной типа XSTRING (строка байтов), затем декодируйте его значение UTF-8 в переменную типа STRING (строка символов).

DATA: xstring_response TYPE xstring,
      string_response  TYPE string.

" Get response as a string of bytes
xstring_response = client->response->get_data( ).

" Assume response is UTF-8 text, so decode it
" (UTF-8 is the default parameter value of method convert_from)
string_response = cl_abap_codepage=>convert_from( xstring_response ).
...