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);
    }
  }  /**
    * 对Iterator对象进行转码处理
    * @param Iterator       iterator对象
    * @return Iterator
   */  public static Iterator IteratorConvert(Iterator iterator){
    List temp=new ArrayList();
    if (iterator==null && ! (iterator instanceof Iterator)) {
      return null;
    }
    while(iterator.hasNext()){
      Object co=iterator.next();
      ObjectConvert(co);
      temp.add(co);
    }
    return temp.iterator();
  }  /**
    * 对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();
    }
  } public 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 "";
   }
 } public 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 "";
   }
 }}
用这个类做转换试试,我在mysql数据库中需要用到这个类,但是oracle9也能解决,但是oracle8没试过

解决方案 »

  1.   

    晕。
    没有象 mysql 那样,在 url 上加个参数就解决问题的方法吗?
      

  2.   

    mysql 在连接参数上作文章也只是限于mysql3,mysql4就不行了,这个方法还是挺管用的,而且你还可以采用过滤器
      

  3.   

    你这样是要在程序的每个角落都要写上转码的调用代码吧?我是想,是否能在应用程序~数据库间插入一个(一层)东西,使得读数据库内容后先转码再存入entity;写数据库前先将entity内容转码后再存入数据库。
    比如使用拦截器。我能够轻易地做到转码后存入数据库。 onsave方法
    可是,我不知如何才能做到取出时转码。而且,由于我在存入前对对象进行了转码,不知如何在存入后还原
      

  4.   

    jsp页面上有没有添加
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      

  5.   

    实话说,没有见过 Ora 中乱码的——就算有,许多也很好解决。
      

  6.   

    修改注册表。使之变成与你的数据库相对应的字符集。
    [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]"NLS_LANG"="american_america.we8iso8859p1"
    比如说以上的是连接数据库字符集为8859的配置