问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HttpServletResponse中的content-type响应头详解

创作时间:
作者:
@小白创作中心

HttpServletResponse中的content-type响应头详解

引用
CSDN
1.
https://blog.csdn.net/qq_29331365/article/details/90175203

HttpServletResponse的content-type响应头包含两部分内容:

一、设置服务器发送给浏览器的数据类型

  1. response.setContentType("text/html"):浏览器会将当前页面按照HTML进行解析
  2. response.setContentType("text/xml"):浏览器会将当前页面按照XML进行解析
  3. response.setContentType("image/png"):浏览器会以图片的方式解析当前页面

  1. 设置以下载方式打开文件:

二、设置服务器发送给浏览器的数据编码方式

如果没有指定编码,浏览器解析结果可能会出现乱码。乱码的原因如下:

浏览器和服务器通信底层是通过socket实现的,而socket数据传输只能是字节数据,所以response.getWriter().write("data")发送的字符数据需要先转换成字节数据。

Tomcat服务器默认使用的编码为ISO-8859-1,所以服务器将字符数据转换成字节数据的方法为:byte[] buf = data.getBytes("iso-8859-1")。而浏览器使用的编码方式为UTF-8,即浏览器解析服务器发送过来的数据使用的方法为:new String(buf, "utf-8")。由于编码方式和解码方式不一致,所以导致乱码的产生。

解决乱码问题可以使用setContentType()方法设置服务器的编码方式,例如:

response.setContentType("text/html;charset=utf-8");

设置服务器编码方式还有一个方法:

response.setCharacterEncoding("utf-8");

效果和response.setContentType("text/html;charset=utf-8");一样。

如果服务器使用response.getOutputStream().write(b);方式发送数据给浏览器,则response.setCharacterEncoding("utf-8");没有效果,因为response.getOutputStream().write()发送的就是字节数据,不需要服务器再进行编码了。

注意:服务器使用UTF-8编码时,如果浏览器不是使用UTF-8编码,也会出现乱码。例如,把浏览器的编码方式改为GB2312时,中文也会变成乱码。

三、完美解决中文乱码问题

  1. 前端网页通过<meta charset="UTF-8">方法指定form表单数据使用的编码方式
  2. 服务器端通过request.setCharacterEncoding("utf-8");方法指定服务器解析浏览器发送数据的解码方式
  3. 服务器端通过response.setContentType("text/html;charset=utf-8");方法指定服务器发送给浏览器的数据采用的编码方式

服务器解析浏览器发送的数据出现乱码问题的详细解决方案可以参考:服务器解析浏览器发送的数据出现乱码问题

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号