最近搞了一个信息发布系统,遇到几个乱码问题,搞的头都大了。最后还是尝试着进行不同的去转码才把问题解决,所以将问题记录下来。
- JSP页面提交到Servlet为乱码:
问题原因:
由于我用的服务器是tomcat,tomcat在没有设置编码时默认为ISO8859-1编码格式,而我们设置的JSP编码方式是UTF-8的或者是GBK的,这样一来当在servlet中取的时候就会产生乱码问题。这种乱码是比较常见的乱码,网上也有好多解决这个问题的方法,在这我记录两种方式来解决乱码:
- 通过设tomcat的编码方式,tomcat的conf下的server.xml中加上URIEncoding="GBK"
<Connector port="9090" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />
- 在程序中进行转码,这样比较麻烦一点:
String strContext = request.getParameter("context");
strContext = new String(strContext.getBytes("ISO-8859-1"),"GBK");
- response.sendRedirect()中文乱码:
说明:其实网上说的这个问题的挺多的,但一个没有能解决我的问题的,但是还是从众多的经验之谈中得到了启发解决了乱码问题,但还是没有真明白这是什么原因?怎么样能去避免这样的问题?还有什么更好的方式可以解决这个问题?希望在以后的工作和学习中能找到问题的跟源。
描述:我在servlet中使用response.sendRedirect("page.jsp?param=问题"),这里的中文"问题"在JSP页面String msg = (String)request.getParameter("param");获得的参数就是乱码,JSP中使用的是GBK的编码格式,而过滤器中也将request设置上了GBK的编码格式
request.setCharacterEncoding("GBK");
但是还是还是搞不定,最后使用下面这个方式将问题解决:
servlet中response.sendRedirect()这前,将url设置编码格式为"ISO8859_1":
String strUrl = "page.jsp?param=问题";
try {
strUrl = new String(strUrl.getBytes("GBK"),"ISO8859_1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.sendRedirect(strUrl );
在JSP中不进行任何的编码操作:
String msg = (String)request.getParameter("param");
这样就解决了我的乱码问题,希望对别人也有帮助。在javaeye也看到一个朋友说的这种情况,但他说在servlet中转完了ISO8859_1以后,回到页面上再转回GBK,我试过不行。但不转确是对的!很诧异啊!