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

Response has 2 bytes per character in 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 响应时,它们每个字符包含一个字节。所以必须有办法改变这一点。想法?

使用 US_ASCII 字符集而不是 UTF-8。没测试过,试试。

正如@Chris O'Toole 在 中所展示的,我们必须

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

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