首页 > 代码库 > 【Web后端笔记】jsp传递中文数据出现乱码的问题

【Web后端笔记】jsp传递中文数据出现乱码的问题

JSP文件中乱码现象经常遇到,那如何处理就是我们不可避免的话题,那么该如何解决呢,下面我针对不同的情况,给出几种处理方式: 

1) JSP页面中文乱码,这种情况比较好处理,在页面的page指令中加上如下一项就行
<%@ page contentType=”text/html;charset=UTF-8” %> 
2) JSP页面采用表单提交时,提交的数据中包含中文,并且提交方式为post这时我们获取表单数据后,展示到其它页面时会出现乱码,解决方案是在获取请求中的参数前,先设置请求的字符集。
1 request.setCharacterEncoding(“UTF-8”) ; 
3) 还是表单提交数据,但是提交方式为默认的get方式,这时即使我们设置了请求字符集,但取出来还是乱码,这时需要如下的转换方式,我把转换方式用一个编码转换类来实现了。
 1 /*  2 * 定义一个转换字符集的工具类CharSetTool  3 *  4 * 定义一个方法,用来转换  5 */  6 public class CharSetTool  7 {  8 /*  9 * 方法toUTF8() 10 * 参数: @inStr 传入要转换的字符串 11 */ 12 public static String toUTF8(String inStr) 13 { 14 String rtStr=""; 15 if(inStr!=null) 16 { 17 try 18 { 19 rtStr=new String(inStr.getBytes("ISO-8859-1"),"UTF-8"); 20 } 21 catch (UnsupportedEncodingException e) 22 { 23 //打印错误信息 24 System.out.println(e.getMessage()); 25 } 26 } 27 return rtStr; 28 } 29 } 
4) URL中文参数乱码处理, 
比如:超链接方式
1 <% String str="我是中国人"; %> 2 <a href="http://www.mamicode.com/next?str=">我是链接,单击可以提交参数</a> 
注:next 为 Servlet的URL Pattern 

那在将中文作为参数值传递时,首先要把中文字符串进行编码转换,转换成URL格式
操作如下:
1 <% String str="我是中国人"; 2 //使用URLEncoder.encode方法 3 str = URLEncoder.encode(str,"UTF-8"); 4 %> 5 <a href="http://www.mamicode.com/next?str=">我是链接,单击可以提交参数</a> 
综合以上几种比较常见的JSP中文乱码的处理方式,不管是何种提交方式,我们都可以使用JSP中的过滤器(Filter)来过滤字符编码,下面我就给出一个我自己定义的 “通用”的字集编码过滤器。
 1 /**  2 * 处理中文字符集的过滤器  3 *  4 * @author Administrator  5 *  6 */  7 public class EncodingFilter implements Filter  8 {  9 //过滤器销毁的方法 10 public void destroy() 11 { 12 } 13 14 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chan) 15 throws IOException, ServletException 16 { 17 18 //设置响应模式 19 response.setContentType("text/html;charset=UTF-8"); 20 21 //判断客户端的提交方式 22 if(((HttpServletRequest)request).getMethod().equalsIgnoreCase("POST")) 23 { 24 //POST方式提交 25 //设置请求字符集 26 request.setCharacterEncoding("UTF-8"); 27 28 } 29 else 30 { 31 //处理GET 32 //获取所有的提交参数 33 Enumeration names = request.getParameterNames(); 34 35 //遍历 36 while(names.hasMoreElements()) 37 { 38 //参数名 39 String name = (String)names.nextElement(); 40 41 //因为不知道参数是多值还是单值 42 String values[] = request.getParameterValues(name); 43 44 //循环处理字符集转换 45 for(int i=0;i<values.length;i++) 46 { 47 values[i] = toUTF8(values[i]); 48 } 49 } 50 } 51 //调用过滤器链中的下一个过滤器 52 chan.doFilter(request, response); 53 } 54 55 //转换方法(内部私有方法) 56 private String toUTF8(String str) 57 { 58 String rt = null; 59 60 try { 61 if(str!=null) 62 { 63 //转换新字符集 64 rt = new String(str.getBytes("ISO-8859-1"),"UTF-8"); 65 66 } 67 } catch (UnsupportedEncodingException e) { 68 // TODO 自动生成 catch 块 69 e.printStackTrace(); 70 } 71 72 return rt; 73 } 74 75 //初始化方法 76 public void init(FilterConfig config) throws ServletException 77 { 78 } 79 } 
然后在web.xml文件中进行相关的配置 : 
 1 <!-- 配置过滤器 -->  2 <filter>  3 <filter-name>EncodingFilter</filter-name>  4 <filter-class>ocean.mvc.filter.EncodingFilter</filter-class>  5 </filter>  6  7 <filter-mapping>  8 <filter-name>EncodingFilter</filter-name>  9 <url-pattern>/*</url-pattern> <!-- 匹配所有的请求 --> 10 </filter-mapping>

参考原文:http://zhidao.baidu.com/link?url=8S3bNfWgwzTSRGeC4eO2SbBgSJShV9r_wpUOlCVKNcn2ERb40A0g5AjSro3aaRaqStuysTa1OvzroMoN0-t81_



 
 

【Web后端笔记】jsp传递中文数据出现乱码的问题