j2ee关于响应头的传输猜想

服务器默认使用iso8859-1的编码格式将数据发送到客户端。对于响应体可以使用respones.setContentType("text/html;charset=uft-8")语句来设置服务器的编码格式,并告知客户端使用指定的编码格式解码。

但是对于响应头,似乎无法起效。这一点是我在写“excel下载“时碰到的,相关代码如下:

response.setContentType("octets/stream;charset=uft-8"); // 通知浏览器发送的数据的编码格式是utf-8且服务器使用utf-8编码response
String filename = "职员列表";
filename = new String(filename.getBytes("gb2312"),"ISO8859-1");//浏览器将头部按照gbk解码
response.addHeader("Content-Disposition","attachment;filename=" + filename + ".xlsx");

这段代码中头部携带的filename必须进行gbk编码后再用iso解码成字符串。

它的原理应该如下:

  服务器端会按iso解码头部字符串,而客户端收到字节流后确实按gbk去解码。

  所以字节流需要是gbk编码格式,而为了让服务器正确将字符串编码成字节流,

  所以服务器端需要用iso格式解码字节流。

  

 

posted on 2017-11-24 16:54  sxfinfo  阅读(121)  评论(0编辑  收藏  举报