Netty中每个字符的响应有2个字节

时间:2018-12-18 15:45:48

标签: java http encoding character-encoding netty

在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 :(得分:0)

@Chris O'Toole在How to convert a netty ByteBuf to a String and vice versa中显示,我们必须

  • 首先使用所需的字符集将字符串转换为字节数组(UTF-8正常工作)String.getBytes(Charset)
  • 然后Unpooled.wrappedBuffer(byte[])使用字节数组代替 字符串。

对于大多数字符,每个字符一个字节,如@rossum所述。

答案 1 :(得分:-1)

使用US_ASCII字符集而不是UTF-8。还没有测试,请尝试。