在这里用字符输出流为例,字节输出流同理
在doPost方法中获取字符输出流并向客户端传输一段中文
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("你好,hello。");
}
访问该路径,得到的响应为
出现乱码也就是编码出现了问题,response中得到的输出流对象默认编码为ISO-8859-1,而我们一般电脑默认编码为GBK或GB2312,所以我们只需要获取流对象之前将默认字符编码改为gbk即可
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("GBK");
response.getWriter().write("你好,hello。");
}
得到的响应结果为
但是有的电脑不一定是GBK,所以我们要告诉浏览器建议使用什么编码,所以要通过消息头的方式告诉浏览器建议编码。
响应头中有一个content-type,其介绍如下
- Content-Type
表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
所以我们就可以设置content-type为"text/html;charset=utf-8"
其中test/html为MIME类型
response.setContestType()方法可以直接设置默认编码并且直接告诉浏览器用什么编码
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=gbk");
response.getWriter().write("你好啊,hello。");
}
响应结果