Ответ имеет 2 байта на символ в Netty - PullRequest
0 голосов
/ 18 декабря 2018

В Netty я создаю ответ, подавая строку в body:

        DefaultFullHttpResponse res = new DefaultFullHttpResponse(HTTP_1_1, httpResponse.getHttpResponseStatus());
        if (body != null) {
            ByteBuf buf = Unpooled.copiedBuffer(body, CharsetUtil.UTF_8);
            res.content().writeBytes(buf);
            buf.release();
            res.headers().set(HttpHeaderNames.CONTENT_LENGTH, res.content().readableBytes());
        }

Когда я смотрю на ответ, я вижу, что content-length в два раза длиннее символов в строке,Я понимаю, что строка Java содержит 2 байта на символ, но я не могу понять, как предотвратить это в Netty при возврате запроса.

Когда я просматриваю ответы Cloudflare, они содержат один байт на символ.Таким образом, должен быть способ изменить это.Идеи?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Как показывает @Chris O'Toole в Как преобразовать NetTy ByteBuf в строку и наоборот мы должны

  • сначала преобразовать строку в байтовый массив, используя желаемыйcharset (UTF-8 работает нормально) String.getBytes(Charset),
  • затем Unpooled.wrappedBuffer(byte[]) с использованием массива байтов вместо строки.

Один байт на символ для большинства символов, как @rossumуказано.

0 голосов
/ 18 декабря 2018

Используйте кодировку US_ASCII вместо UTF-8.Не проверял, попробуйте.

...