编了个简单的jsp,结果jsp向SqlServer2008传中文出现乱码问题,找了半天发现以下几个错误,总结一下。
通常情况下遇到乱码问题,解决的思路都是保证数据库+程序+页面编码三码一致。
我遇到的问题如下:
1.表单使用Post方式提交后接收到的乱码问题
这个乱码是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,
接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
A、接受参数时进行编码转换
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");
这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
B、在请求页面上开始处,执行请求的编码代码
request.setCharacterEncoding("UTF-8");
把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。
直接使用String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。
这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。
**如果要调用request.setCharacterEncoding进行编码设置,一定要在任何参数被访问之前调用。**
类StudentSer extends HttpServlet改后代码:
...
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Student student = new Student();
student.setSname(request.getParameter("sname"));
student.setSpass(request.getParameter("spass"));
StudentImpl studentImpl = new StudentImpl();
studentImpl.saveStudent(student);
}
...
C、为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器filter对所有jsp
创建 EnCodeFilter.java
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.Se