получение строкового содержимого из FullHttpResponse byteBuf в Netty - PullRequest
1 голос
/ 04 апреля 2019

Я пробовал разные вкусы, и все они дают невероятные результаты.Но ответ в браузере выглядит нормально.(чистая строка json)

    FullHttpResponse response = (FullHttpResponse) msg;
    byte[] bytes = new byte[response.content().readableBytes()];
    response.content().readBytes(bytes);
    String result = new String(bytes);

Другой, который я попробовал в соответствии с предложением здесь -

response.content().toString(CharsetUtil.UTF_8);

Оба являются бредом, подобным этому

enter image description here

PS: я использую HttpObjectAggregator и HttpServerCodec в конвейере

1 Ответ

1 голос
/ 05 апреля 2019

Скорее всего, вы просматриваете сжатые данные, поскольку вы имеете дело с экземплярами FullHttpResponse, и большинство серверов в наши дни используют сжатие, весьма вероятно, что ваши данные будут сжаты.

Чтобы увидеть алгоритм сжатия, стоящий за сжатием, вы должны взглянуть на response.headers().get(HttpHeaders.Names.CONTENT_ENCODING)

Может возвращать комбинацию разных значений (разделенных , в случае нескольких записей):

  • gzip: данные сжимаются с помощью GZip
  • `deflate: данные сжимаются с использованием deflate
  • identity: сжатие не производилось
  • br: данные сжимаются с помощью brotli

Одним из преимуществ использования FullHttpResponse является то, что вам не нужно беспокоиться об используемой кодировке передачи, поскольку она обрабатывает это за вас.

...