论坛首页 入门技术论坛

struts+Hibernate+tomcat+mysql中文乱码问题

浏览 5864 次
该帖已经被评为新手帖
作者 正文
   发表时间:2004-12-02  
tomcat 的server.xml中无法配置:
jdbc:mysql://localhost:3306/jpcf?unicode=true&characterEncoding=gbk

但我在用
    Session session = HibernateUtil.currentSession();
      tx = session.beginTransaction();
      Cltype ct = (Cltype) session.load(Cltype.class, vpform.getCltype_id());
      vp.setCltype(ct);
      session.save(vp);
      tx.commit();
保存ct的内容时,数据库中正常保存 中文字符,我可以在mysql的控制台看到

但我用
    Session session = HibernateUtil.currentSession();
      tx = session.beginTransaction();
      allVehicle = session.find("from VehicleProperty vp");
      tx.commit();
查询到的记录在jsp页面上显示却是乱码

怎么解决啊?
   发表时间:2004-12-02  
cdreamer 写道
tomcat 的server.xml中无法配置:
jdbc:mysql://localhost:3306/jpcf?unicode=true&characterEncoding=gbk


用?代替?
用&代替&
0 请登录后投票
   发表时间:2004-12-02  
在tomcat的server.xml中配置正确后
页面输出还是乱码

我做了个servletFilter
package com.jpcf.filter;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class CharacterEncoding extends HttpServlet implements Filter {

  protected String encoding = null;

  protected FilterConfig filterConfig = null;

  public void destroy() {

      this.encoding = null;
      this.filterConfig = null;

  }

  public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain chain) throws IOException,
          ServletException {

       String encoding = selectEncoding(request);
      if (encoding != null) {
         request.setCharacterEncoding(encoding);
          System.out.println("character Encodinged");
      }
      chain.doFilter(request, response);
  }

  public void init(FilterConfig filterConfig) throws ServletException {

      this.filterConfig = filterConfig;
      this.encoding = filterConfig.getInitParameter("encoding");

  }

  protected String selectEncoding(ServletRequest request) {

      return (this.encoding);
  }

}

但是这样一过滤后
连写到mysql数据库中都成乱码了

该怎么解决啊?

是不是需要对hibernate取出来的数据用
getBytes()来转换,但这样太麻烦了

有没有更好的办法啊?
0 请登录后投票
   发表时间:2004-12-02  
package com.sales.util;

import java.beans.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;

import org.apache.commons.beanutils.*;

public class ObjectBeanUtils {
  public ObjectBeanUtils() {
  }

  /**
   * 对List对象进行转码处理
   * @param List        List对象
   * @return String
   */
  public static void ObjectConvert(List list) {
    if (list == null && ! (list instanceof List)) {
      return;
    }
    for (int i = 0; i < list.size(); i++) {
      Object co = list.get(i);
      ObjectConvert(co);
    }
  }

  public static void ObjectConvert(Iterator iter){
    if (iter == null && ! (iter instanceof Iterator)) {
      return;
    }
    while(iter.hasNext()){
      Object co = iter.next();
      ObjectConvert(co);
    }
  }

  /**
   * 对Object(Class)对象进行转码处理
   * @param o        Object对象
   * @return String
   */
  public static void ObjectConvert(Object o) {
    try {
      Map map = BeanUtils.describe(o);
      Set keySet = map.keySet();
      for (Iterator iter = keySet.iterator(); iter.hasNext(); ) {
        Object element = (Object) iter.next();

        PropertyDescriptor desc = PropertyUtils.getPropertyDescriptor(o,
            element.toString());
        Class cl = desc.getPropertyType();
        System.out.print(cl.getName());
        if (cl.equals(String.class)) {
          BeanUtils.setProperty(o, element.toString(),
                                ObjectCharacterConvertChinese(map.get(element)));
        }
      }
    }
    catch (IllegalAccessException e) {
      e.printStackTrace();
    }
    catch (InvocationTargetException e) {
      e.printStackTrace();
    }
    catch (NoSuchMethodException e) {
      e.printStackTrace();
    }
  }

  private static String ObjectCharacterConvertChinese(Object value) {
    if (value == null && ! (value instanceof String)) {
      return "";
    }
    try {
      String temp_p = (String) value;
      byte[] temp_t = temp_p.getBytes("ISO-8859-1");
      String unicode = new String(temp_t, "gbk");
      return unicode;
    }
    catch (UnsupportedEncodingException e) {
      return "";
    }
  }

  private static String ObjectCharacterConvertISO(Object value) {
    if (value == null && ! (value instanceof String)) {
      return "";
    }
    try {
      String temp_p = (String) value;
      byte[] temp_t = temp_p.getBytes("gbk");
      String unicode = new String(temp_t, "ISO-8859-1");
      return unicode;
    }
    catch (UnsupportedEncodingException e) {
      return "";
    }
  }

}
0 请登录后投票
   发表时间:2004-12-06  
没有必要这么麻烦。
做个filter。就搞定。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics