在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响应时,每个字符包含一个字节。因此,必须有一种方法来改变这一点。想法?
答案 0 :(得分:0)
@Chris O'Toole在How to convert a netty ByteBuf to a String and vice versa中显示,我们必须
String.getBytes(Charset)
,Unpooled.wrappedBuffer(byte[])
使用字节数组代替
字符串。对于大多数字符,每个字符一个字节,如@rossum所述。
答案 1 :(得分:-1)
使用US_ASCII字符集而不是UTF-8。还没有测试,请尝试。