Java WEB开发中的中文乱码问题解决
在项目中总是遇到乱码问题,有时候在网上查找到了解决方案,但是没有记录下来为什么出现的乱码。因为出现乱码的方式有好几种,我简单总结一下吧,为以后留着用,也算总结学习一下。
一般来讲,为了处理乱码问题,在javaweb中我们需要注意哪些地方?
1、java文件的编码格式
2、jsp页面的编码格式
3、在servlet中对request、response对象的编码格式的设定
4、浏览器中查看页面的字符集编码格式
前提:
1.开发和编译代码时指定字符集,JBuilder和Eclipse都可以在项目属性中设置。页面的编码格式一致:
所有页面的编码格式应该尽量一样,因为有时候在两个页面之间跳转的时候,如果编码格式不一,那么服务器不知道该用哪一种编码格式。
2.页面编码格式和tomcat配置文件中的编码格式保持一致:
tomcat/conf/server.xml配置文件中Connector(连接器)标签URIEncoding(统一资源标示符编码)的属性为"GBK"或"UTF-8"。
3.使用过滤器,如果所有请求都通过一个servlet控制分配器,那么使用servlet的filter的执行语句,将浏览器发送过来的请求都设置编码为utf-8.
在web.xml文件中:
<filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class>com.struts.beans.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>SetCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
public class SetCharacterEncodingFilter implements Filter {private String encoding;public void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stubthis.encoding = filterConfig.getInitParameter("encoding");}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding(this.encoding);chain.doFilter(request, response);}}
<a href="some.jsp?key=<%=java.net.URLEncoder.encode("可能包含中文的参数","UTF-8")%>">联结</a>
function getName(){ var name=jQuery("#name").val(); name= encodeURI(encodeURI(name));//需要经过两次编码 window.location.href="user.action?name="+name;}
String name= request.getParameter("name");try {name= URLDecoder.decode(name, "UTF-8"); } catch (UnsupportedEncodingException e) {e.printStackTrace();}