提交页面是utf-8,接受页面是utf-8,数据库是utf-8。
提交数据库以前中文都可以正常显示,但录入数据库时中文又变成了???号。在本地测试,数据库是中文的设置,录入则一点问题没有。页面均加入了以下代码!
<%@page pageEncoding="utf-8"%>
<%@page contentType="text/html; charset=utf-8"%>
<%request.setCharacterEncoding("utf-8");%>可还是出错,为什么阿!

解决方案 »

  1.   

    Oracle, Mysql都需要在建库的时候选择UTF-8编码来建库
      

  2.   

    使用过滤器,这是因为tomcat容器自身的问题。
      

  3.   

    我用的是weblogic8.1,设置了服务器报错,无法读取我的设置。设置如下:
      <filter>    <filter-name>Encoding Filter</filter-name>    <filter-class>filters.EncodingFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>   <filter-mapping>    <filter-name>Encoding Filter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>对吗?
      

  4.   

    我不知你遇到的问题是否我之前碰到的问题,我之前开发一个繁体网站,字符问题困扰了我和很久,后来半年后我才解决了。这是我得到的两点总结,然望对你有帮助:1 显示上的文件,按哪种编码显示,是根据页头的<META http-equiv="Content-Type" content="text/html; charset=XXXX">,来决定的。2 但是,在把变量存入数据库时,按何种方式编码,是<% @codepage=XXX %>来决定的,只有存入时是和显示时都是同一种方式,才不会出现乱码。很多人都没注意到第二步。如果你是直接在JSP页面上写存入的语句的,就加<% @codepage=XXX %>,如果是用了MVC构架的,就在JAVA中,用类似以下函数来进行转换:public String ISOConvert(String s_string)
    {
         
          try
          {
            String des=new String(s_string.getBytes("GBK"),"iso8859-1");
            return des;
          }
          catch(Exception ex)
      {
            String des="";
            return des;
      } }3 如果你真是百分百做到正确,你测试这个页面时,你的IE的字符应自动调到相应的字符集显示的,而不用人工来调。4 乱码的问题,和数据库或服务器是否为简体中文,完全无关。
      

  5.   

    过滤器:SetCharacterEncodingFilter
    package com.struts.common;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 SetCharacterEncodingFilter implements Filter {
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;

    public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig=filterConfig;
    this.encoding=filterConfig.getInitParameter("encoding");
    String value=filterConfig.getInitParameter("ignore");
    if(value==null)
    this.ignore=true;
    else if(value.equalsIgnoreCase("true"))
    this.ignore=true;
    else
    this.ignore=false;
    } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    // TODO 自动生成方法存根
    if (ignore || (request.getCharacterEncoding() == null)) {
       String encoding = selectEncoding(request);
            if (encoding != null)
       request.setCharacterEncoding(encoding);
    }
    chain.doFilter(request, response);
    } public void destroy() {
    // TODO 自动生成方法存根
    this.encoding = null;
    this.filterConfig = null;
    }

    protected String selectEncoding(ServletRequest request) {
      return (this.encoding);
    }
    }
      

  6.   

    web.xml需要加上:
    <!--  Set Character Encoding-->
      <filter>
       <filter-name>Set Character Encoding</filter-name>
       <filter-class>com.struts.common.SetCharacterEncodingFilter</filter-class>
       <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
       </init-param>
      </filter>
      
      <filter-mapping>
       <filter-name>Set Character Encoding</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!--   Set Character Encoding-->
      

  7.   

    %@page pageEncoding="utf-8"%>
    这是给编译器用的, 编译 JSP 是识别其中的字符。<%@page contentType="text/html; charset=utf-8"%>  
    这是给浏览器用的,让 IE/NS/MF 知道这里面的字符该怎么显示。
    它和 response.setCharacterEncoding(); 同样的功能。<%request.setCharacterEncoding("utf-8");%>
    这是给 Servlet 容器用的,告诉 Tomcat 之流 当我 Java 中处理时 getParameter 时应该怎样取数据。当你这个页面开始显示正常因为你 正确使用了 上面 第二个,
    当你提交后不正常,可能接受 request 的 servlet/jsp(注意:他并不一定是你当前包含表单的JSP) 并没有  request.setCharacterEncoding(); 这个时候应该你在 servlet/jsp 中 request.setCharacterEncoding();或者用过滤器.以上三点都正确使用了么?