zoukankan      html  css  js  c++  java
  • 【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="next?str=<%=str%>">我是链接,单击可以提交参数</a> 
    注:next 为 Servlet的URL Pattern 

    那在将中文作为参数值传递时,首先要把中文字符串进行编码转换,转换成URL格式
    操作如下:
    1 <% String str="我是中国人"; 
    2 //使用URLEncoder.encode方法 
    3 str = URLEncoder.encode(str,"UTF-8"); 
    4 %> 
    5 <a href="next?str=<%=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_



     
     
  • 相关阅读:
    Alice and Bob 要用到辗转相减
    Java经典设计模式
    设计模式---创建类---建造者模式
    luogu4267 TamingtheHerd (dp)
    nowcoder172C 保护 (倍增lca+dfs序+主席树)
    nowcoder172A 中位数 (二分答案)
    bzoj4985 评分 (二分答案+dp)
    luogu4269 Snow Boots G (并查集)
    luogu4268 Directory Traversal (dfs)
    bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)
  • 原文地址:https://www.cnblogs.com/tanghuian/p/4053533.html
Copyright © 2011-2022 走看看