0

使用 java,我采用一个代表一些 HTML 的字符串:

String webPage = "<!DOCTYPE html><html xmlns:csi='http://www.massimocorner.com/libraries/csi/' lang='de'>" +
                        "<head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/> ..... </html>

并将其放入一个 zip 文件中,如下所示:

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
ZipStreamOutput output = new ZipStreamOutput( byteArrayOutputStream );
OutputStream os = output.addStream(Integer.toString(i) +".html");
os.write(webPage.getBytes()); 
os.flush();
output.finish(); 
byte[] data = byteArrayOutputStream.toByteArray();

然后我从我的 serverlet 提供 ZIP 文件,如下所示:

response.setCharacterEncoding("UTF-8");
response.setContentType( "application/zip"); 
response.setContentLength( data.length ); 
response.setHeader( "Content-Disposition", "inline; filename="  + "filename.zip"); 
response.getOutputStream().write( data ); 

当我提取 ZIP 文件并在浏览器中打开 HTML 文件时,即使 HTML 表明它应该以 UTF-8 呈现,它也不会呈现。

如果我只是提供 HTML 文件而不压缩它,它会正常呈现。

有任何想法吗?

谢谢!

4

1 回答 1

0

如果您尝试发送 HTML 的压缩版本并让浏览器呈现 HTML,那么您希望将 Content-Encoding 标头设置为“gzip”,将 Content-Type 标头设置为“text/html”。使用 GZIPOutputStream 而不是 ZIPOutputStream 压缩页面。检查“接受”请求标头以确保浏览器支持这种压缩。

请参阅如何使用 gzip 设置内容编码

您也可以使用 Servlet 过滤器执行此操作:http: //onjava.com/onjava/2003/11/19/filters.html

于 2012-08-17T01:22:34.490 回答