响应在 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 所述,大多数字符每个字符一个字节。
在 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 所述,大多数字符每个字符一个字节。