以编程方式将.html文件放入ZIP加密文本中

时间:2012-08-17 00:21:16

标签: java html servlets utf-8 zip

使用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();

然后我从我的servelet中提供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文件,那么它会正常呈现。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

请参阅How to set Content-Encoding with gzip

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