我用的jdk1.5+tomcat5.5+mysql5.0,数据库的字符集是utf8,jsp页面字符集也是utf8,现在我遇到这样的问题:数据库中只要是中文的,就全部都是乱码,但从页面读出来是正常的;从页面中写中文,数据库中是乱码,但从页面读出来是正常的;直接在MYSQL Command Client中写insert语句,插入的中文显示正常,但读到页面是乱码。我有两个问题需要请教。1、如何把数据库中的乱码转换成正常的,因为数据库中现有的数据不能丢失。2、如何解决从页面写数据库乱码问题?
请各位大侠帮忙解决,谢谢!谢谢!

解决方案 »

  1.   

    &useUnicode=true&characterEncoding=gbk";Test
      

  2.   

    由于我对数据库的操作用的是别人写好的现成的数据库操作bean,没有源代码,是一个打包的.jar文件,应该不是这个问题啊,因为以前别人用这个好好的。
      

  3.   

    那数据库URL应该是在配置文件里的吧,找找看,加上上面说的那个后缀再试试!
      

  4.   

    是啊,数据库URL加上这个&useUnicode=true&characterEncoding=gbk";试试
      

  5.   

    /**
       * 转换数据库读出的字符显示为中文
       * @param str 要转换的字符 String
       * @return String
       */
      public String getStr_gb(String str){
        String temp = null;
        try {
          String temp_p = str;
          if (temp_p == null) {
            return temp;
          }
          temp_p = temp_p.trim();
          temp = new String(temp_p.getBytes("ISO8859_1"), "GBK");
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        return temp;
      }
      

  6.   

    我用的struts,加上&useUnicode=true&characterEncoding=gbk也不行啊。
    <data-sources>
        <data-source type="org.apache.commons.dbcp.BasicDataSource" key="org.apache.struts.action.DATA_SOURCE">
          <set-property value="com.mysql.jdbc.Driver" property="driverClassName" />
          <set-property value="jdbc:mysql://127.0.0.1:3306/test" property="url"  useUnicode="true" characterEncoding="gbk" />
        </data-source>
      </data-sources>
      

  7.   

    我觉得你等数据库编码方式不正确,两个汉字的UTF-8编码是六位,如果数据库编码方式是gbk那应当看到三个不认识的汉字,现在你看到了六个,我感觉还是数据库的编码方式问题。那你数据库中可以看见的我们两个字,读到页面上显示成什么了???
      

  8.   

    添加filter是一个很好的选择。建议一定要加上。
      

  9.   

    to hyperading: 如果数据库里存的是"我们"两个字,则读到页面上是“????”,四个问号。
    to hyperading() :我刚刚也试了一下filter,是这样写的: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.UnavailableException;/**
     * Example filter that sets the character encoding to be used in parsing the
     * incoming request
     */
    public class SetCharacterEncodingFilter implements Filter {    /**
         * Take this filter out of service.
         */
        public void destroy() {
        }
        /**
         * Select and set (if specified) the character encoding to be used to
         * interpret request parameters for this request.
         */
        public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)throws IOException, ServletException {    request.setCharacterEncoding("GBK");    // 传递控制到下一个过滤器
        chain.doFilter(request, response);
        }    public void init(FilterConfig filterConfig) throws ServletException {
        }
    }
    然后在tomcat中的web.xml中加入这样的一段:
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>SetCharacterEncodingFilter</filter-class>
    </filter>
        <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    结果系统只能进第一个登录页面,再就进不去了,提示出错:
    type Status reportmessage /test/userLogin.dodescription The requested resource (/test/userLogin.do) is not available.请问过滤器是怎么用的,是不是我把SetCharacterEncodingFilter.class放错地方了,应该放在哪里?谢谢!
      

  10.   

    在tomcat中设置一下,网上有相关的资料
      

  11.   

    用utf-8中文是乱玛,没办法,可以使用ISO-8859-1,程序编译的时候使用iso-8859-1, 以及在jsp页面上也使用<%@ page contentType="text/html; charset=ISO8859_1" %>。这样基本可以解决乱玛问题
      

  12.   

    另外,如果是在linux上的话,启动前输入这样的命令
    LANG=en_US.ISO-8859-1;export LANG
    把系统编码换成ISO-8859-1
      

  13.   

    在没有用filter之前,我的页面上显示是正常的,就是数据库中存的是乱码。用了filter后,就全都是乱码了。