服务器默认使用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格式解码字节流。