从页面上得到的值(中文) 在action中显示的是乱码的。请问怎么解决

解决方案 »

  1.   

    在WEB.xml配置文件中加入
      <filter>
        <filter-name>Spring character encoding filter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
         <param-name>encoding</param-name>
         <param-value>GBK</param-value>
        </init-param>
      </filter>  <filter-mapping>
        <filter-name>Spring character encoding filter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      

  2.   

    SSH的可以用spring自带的过滤器来实现过滤操作.
    下面是我遇到过的问题,以及整理的东西。希望对你有用哈...UTL 传参乱乱码问题解决方案方案一·
    页面间的传递:由A页面通过url传值给B页面
    或者由A页面的一个连接直接调整到某个action 
    产生乱码问题。
    1· 如:
    <a href ="Detail.jsp?userName=<%=中国%>">数据显示</a>
    <a href ="showDetail.do?userName=<%=url%>">数据显示</a>
    这种情况下如果不进行编码转换在B页面接到的值将会产生乱码。
    第一步:首先我们把“中国”进行处理后再进行传递
    <%
    String url = java.net.URLEncoder.encode("中国","UTF-8");
    %>
    经过处理后的url会以:%E9%9A...这样的形式进行传递
    第二步:通过URL进行传递:
    <a href ="Detail.jsp?userName=<%=url%>">数据显示</a>2· 我们在B页面或者在将要接收此URL的action做如下处理就不会有乱码发生了
    <%
    request.setCharacterEncoding("UTF-8"); 
    String name = request.getParameter("userName");
    %>
    **注意:在如果是调整到具体的action时,只要按常规做法,直接设置编码格式,以及和往常一下获取传来的参数即可。
    经以上处理后页面间的乱码问题可以解决了。
      

  3.   

    3L+2L
    就是页面设置编码方式
    在web.xml加上过滤器
    应该就OK
    当然数据库保存的两说了
      

  4.   

    如果是用的struts2.0,页面表单提交方式写成post提交乱码不会出现了
      

  5.   

    <filter>
       <filter-name>char</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
       </init-param>
      </filter>
      <filter-mapping>
       <filter-name>char</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>web.xml里面配置一下 OK了
      

  6.   

     <param-value>GBK </param-value>这里面到底是gbk还是utf-8?
      

  7.   

    GBK和UTF-8都支持中文,从效果上都是可以的
      

  8.   

    继承javax.servlet.Filter  
      

  9.   

    写个过滤器,或者在Action中重构字符串,还有就是重写ActionServlet这个类!方法很多的
      

  10.   

    <!-- 过滤器 -->
    <filter> <filter-name>CharsetEncodingFilter</filter-name> <filter-class>filters.CharsetAllEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter>
    //CharsetAllEncodingFilter .java
    package filters;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;public class CharsetAllEncodingFilter implements Filter { private String encoding = null; /**
     * Request.java 对 HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所有的
     * HttpServletRequest 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只需要用新的 Request
     * 对象替换页面中的 request 对象即可.
     */ class Request extends HttpServletRequestWrapper { private String encoding = null; public Request(HttpServletRequest request) {
    super(request);
    encoding = CharsetAllEncodingFilter.this.encoding;
    } /**
     * 转换由表单读取的数据的内码. 从 ISO 字符转到 在web.xml中设置的encoding.
     */
    public String toChi(String input) {
    if (input == null) {
    return null;
    } else {
    try {
    byte[] bytes = input.getBytes("ISO8859-1");
    return new String(bytes, encoding);
    } catch (Exception ex) { }
    return null;
    }
    } /**
     * Return the HttpServletRequest holded by this object.
     */
    private HttpServletRequest getHttpServletRequest() {
    return (HttpServletRequest) super.getRequest();
    } /**
     * 读取参数 -- 修正了中文问题.
     */
    public String getParameter(String name) {
    return toChi(getHttpServletRequest().getParameter(name));
    } /**
     * 读取参数列表 - 修正了中文问题.
     */
    public String[] getParameterValues(String name) {
    String values[] = getHttpServletRequest().getParameterValues(name);
    if (values != null) {
    for (int i = 0; i < values.length; i++) {
    values[i] = toChi(values[i]);
    }
    }
    return values;
    }
    } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpreq = (HttpServletRequest) request;
    if (httpreq.getMethod().equals("POST")) {
    request.setCharacterEncoding(encoding);
    } else {
    request = new Request(httpreq);
    } chain.doFilter(request, response);
    } public void init(FilterConfig filterConfig) throws ServletException {
    encoding = filterConfig.getInitParameter("encoding");
    }}
      

  11.   

    过滤器tomcat的server.xml的URIEncodinggood luck
      

  12.   

    我这有两种方法:
       一、像楼上各位想法一样写一个过滤器,这里就不再详述。
       二、写一个类继承ActionServlet,重写service方法,在原方法基础上加上request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");两句话。然后web.xml中配置自己写的这个ActionServlet而不是框架自带的,如class MyActionServlet extends ActionServlet{ @Override
    public  void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    request.setCharacterEncoding("gb2312");
    response.setCharacterEncoding("gb2312");
    super.service(request, response);
    }
      

  13.   

    实现接口Filter过滤,配置 Web.xml
      

  14.   

    1.首先写一个servlet类import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;public class AllFilter implements Filter {
    private String encoding;
    public String getEncoding() {
    return encoding;
    }
     
    public void setEncoding(String encoding) {
    this.encoding = encoding;
    } public void destroy() {
    // TODO Auto-generated method stub

    } public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    // TODO Auto-generated method stub
    arg0.setCharacterEncoding(this.encoding);
    arg1.setCharacterEncoding(this.encoding);
    arg2.doFilter(arg0, arg1);
    } public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub
    this.encoding=arg0.getInitParameter("encoding");
    }}
    2.配置web.xml <filter>
       <filter-name>AllFilter</filter-name>
       <filter-class>com.newer.crm.web.filter.AllFilter</filter-class>
       <init-param>
       <param-name>encoding</param-name>
       <param-value>gbk</param-value>
       </init-param>
      </filter>  <filter-mapping>
       <filter-name>AllFilter</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      

  15.   

    如果是ssh整合(struts2):
    方法一:把spring.jar包拷到lib下,然后,web.xml里在struts2的filter之前配置
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>
    org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    方法二:
    如果struts2的版本高于2.1.6就可以在struts.xml里这样配置
    <constant name="struts.i18n.encoding" value="GBK"></constant>