默认情况下Servlet向浏览器发送的编码为西欧语言ISO-8859-1,不包含中文,所以如果服务器端向浏览器发送的内容中包含中文就会显示为“?”乱码,解决方法有很多,如下:
各种编码一览
A. JSP/Servlet都有的编码设置
1. request.setCharacterEncoding("UTF-8")
2. response.setCharacterEncoding("UTF-8")
3. response.setContentType("text/html; charset=UTF-8");
4. response.setHeader("Content-Type", "text/html; charset=UTF-8");
B. JSP专有的编码设置
1. <%@ page pageEncoding="UTF-8" %>
2. <%@ page contentType="text/html; charset=UTF-8" %>
C. HTML页面中的编码设置
1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
但是要注意的是response.setContentType("text/html;charset=gbk");设置编码的语句必须放在PrintWriter out = response.getWriter();语句前面,否则还是起不到设置编码的效果。
示例:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 处理get post的多种简单实用的方法
*/
public class HelloWorldServlet extends HttpServlet {
@Override
//重写service方法不用单独调用get post等方法来处理浏览器发来的请求了
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.println("<html><head></head><body><center><font color='red'>中文HelloWorldServlet!</font></center></body></html>");
out.flush();
out.close();
}
/* @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//这样写的好处是减少了代码量,使代码更容易被维护,代码只需修改一处
doGet(req, resp);
}
@Override
//只需要在get post等任意一个方法中写处理客户端请求的方法,其它地方直接调用就可以
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html><head></head><body><center><font color='red'>HelloWorldServlet!</font></center></body></html>");
out.flush();
out.close();
}*/
private static final long serialVersionUID = 1L;
}
参考资料
http://blog.csdn.net/superbeck/archive/2010/03/05/5347815.aspx
http://blog.csdn.net/yjg428/article/details/5635661