经常在论坛中看到朋友遇到中文乱码的问题而不知所措,本人以自己在项目中常遇到的中文乱码问题及解决方法,小结一下,希望能对朋友有所帮助,如有不足,请指正。 总的归纳有以下几个方面: 一、在表单正常提交后,页面显示出乱码。 解决方法: 1、如果是直接jsp页面提交到别外一个jsp页面,或jsp提交到servlet,可以在jsp或serlet的doPost()或doGet()方法设置编码转换,将请求后的数据转成中文,并在输出时也设置为中文如: request.setCharacterEncoding("GBK"); response.setCharacterEncoding("GBK"); 2、设置过滤器(推荐方法): 写一个过滤器类,并且建议写在静态类,方便调用,如下: [java]view plaincopyprint? /** * 全局编码过滤器, * * @author fafuhefan * */ publicclassEncodingFilterimplementsFilter { String encoding ="GBK"; publicvoiddestroy() { } publicvoiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)throwsIOException, ServletException { HttpServletRequest request_1 = (HttpServletRequest) request; HttpServletResponse response_1 = (HttpServletResponse) response; request_1.setCharacterEncoding(encoding); response_1.setCharacterEncoding(encoding); chain.doFilter(request, response); } publicvoidinit(FilterConfig config)throwsServletException { String str = config.getInitParameter("encoding"); if(str !=null&& str.length() >0) { encoding = str; } } } /** * 全局编码过滤器, * * @author fafuhefan * */ public class EncodingFilter implements Filter { String encoding = "GBK"; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest request_1 = (HttpServletRequest) request; HttpServletResponse response_1 = (HttpServletResponse) response; request_1.setCharacterEncoding(encoding); response_1.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { String str = config.getInitParameter("encoding"); if (str != null && str.length() > 0) { encoding = str; } } } 并在web.xml作如下配置: <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.crm.filter.EncodingFilter</filter-class>(说明:此为类路径) <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 二、如果为url后在跟的参数为中文,如:xxx.do?name=你好,或采用自动跳转链接时,后面跟的提示信息含有中文。 解决方法: 1、可以写个类,进行转换如: [java]view plaincopyprint? /** * 将编码转成中文编码GBK * @author fafuhefan * 返回中文字符串 */ publicclasstools { /** * @param str * 需要转换的字符串 * @return * 中文字符串 */ publicstaticString toGBK(String str) { try{ str = java.net.URLEncoder.encode(str,"gb2312"); }catch(UnsupportedEncodingException e) { e.printStackTrace(); } returnstr; } } /** * 将编码转成中文编码GBK * @author fafuhefan * 返回中文字符串 */ public class tools { /** * @param str * 需要转换的字符串 * @return * 中文字符串 */ public static String toGBK(String str) { try { str = java.net.URLEncoder.encode(str, "gb2312"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } } 2、在tomcat的server.xml做以下配置: <Connector port="8099" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 三、ajax提交出现在乱码。 解决方法:以上二种方法基本可以解决。 四、文件上传时文件名出现乱码。 解决方法:在上传时,先对文件名进行编码设置,可以采用此方法: 例:paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK")); 五、有时数据库插入数据时出现的乱码: 解决方法: 可以在struts中的Form类中添加个方法就行 public void reset(ActionMapping arg0, HttpServletRequest arg1) { try{ arg1.setCharacterEncoding("gbk"); }catch(Exception e){ e.printStackTrace(); } }
解决web项目开发中常见的中文乱码问题
猜你喜欢
转载自wangjinlongaisong-126-com.iteye.com/blog/1527159
今日推荐
周排行