我正在用 Netty 开发一个 http 服务器。在某些情况下,服务器必须回答一个 1x1 透明像素。所以我在 base64 中硬编码了一个 GIF 透明像素,并使用以下代码返回它:
String pixel_string= new String (Base64.decodeBase64("R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="));
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.setContent(ChannelBuffers.copiedBuffer(pixel_string, CharsetUtil.UTF_8));
编辑:我还设置了内容类型: response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "image/gif"); 在 Chrome 中,一切都很好。但是,Firefox 告诉我它无法显示像素(这对我的应用程序来说非常糟糕),因为像素数据无效。经过多次调查,我终于找到了解决办法,将字符集更改为 Iso-8859-1。
response.setContent(ChannelBuffers.copiedBuffer(
responseBuilder.pixel_string, CharsetUtil.ISO_8859_1));
我不明白它为什么会起作用,这让我觉得在某些情况下我可能会遇到麻烦。我尝试更改 Firefox 首选项(默认使用 UTF8),但变化不大。
为什么 Firefox 接受 ISO-8859 编码,而不是 UTF-8 ?我可以改变吗?有人会知道问题的根源以及如何确保无论用户的设置如何都能正常工作吗?
谢谢