先说一个重点:tomcat默认使用iso编码,而浏览器默认使用GBK编码,所以在处理中文方面会出现问题。
servlet向浏览器写数据的两种方式
1.二级制形式:
(1)将中文用gbk编码,然后用输出流输出到浏览器中
public class ServletDemo1 extends javax.servlet.http.HttpServlet {
protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException{
ServletOutputStream servletOutputStream=response.getOutputStream(); //获取outputStream二进制输出流
//向浏览器输出数据
servletOutputStream.write("中文".getBytes("gbk"));
}
}
(2)为了同一格式得用utf-8编码(注意:不能将上面代码的gbk改为utf-8,因为浏览器是gbk编码),可以在HTTP响应的消息头里面设置编码格式,而HttpServletResponse对象就有相应的方法:
response.setHeader("Content-Type","text/html;charset=UTF-8");
response.getOutputStream().write("中文".getBytes("UTF-8"));
(3)上面是设置消息头,也可以使用html标签模拟一个http消息头
servletOutputStream.write("<meta http-equiv='content-type' content='text/html;charset='utf-8'>".getBytes("gbk"));
servletOutputStream.write("中文".getBytes("UTF-8"));
2.字符形式
(1)tomcat默认使用iso编码,而中文不支持这个码表,所以设置编码格式未utf-8,同时设置浏览器显示格式为utf-8
response.setContentType("text/html;charset=utf-8"); //这个方法做了两件事:设置浏览器用utf-8显示数据,内部把中文转码的码表设置成utf-8
PrintWriter printWriter=response.getWriter();
printWriter.write("中文");