富文本框回显乱码问题解决

富文本编辑器是将样式及内容一起放入数据库,所用数据类型为blob型,在数据装入数据库及从数据库中读取时应注意编码格式问题,以防止出现乱码。出现乱码时主要解决手段:

1.查看创建blob对象是不是用的“utf8”编码格式

2.查询时是否进行了二次编码解析,主要体现在mapper.xml文件中。blob对应字段要进行处理,处理内容如下:

[java]  view plain  copy
  1. package cn.ffcs.drive.common.util;  
  2.   
  3. import java.io.ByteArrayInputStream;  
  4. import java.io.UnsupportedEncodingException;  
  5. import java.sql.Blob;  
  6. import java.sql.CallableStatement;  
  7. import java.sql.PreparedStatement;  
  8. import java.sql.ResultSet;  
  9. import java.sql.SQLException;  
  10.   
  11. import org.apache.ibatis.type.BaseTypeHandler;  
  12. import org.apache.ibatis.type.JdbcType;  
  13.   
  14. /** 
  15.  * className:ConvertBlobTypeHandler 
  16.  *  
  17.  * 自定义typehandler,解决mybatis存储blob字段后,出现乱码的问题 
  18.  * 配置mapper.xml: 
  19.  * <result  typeHandler="cn.ffcs.drive.common.util.ConvertBlobTypeHandler"/> 
  20.  *  
  21.  * @author pengyh 
  22.  * @version 1.0.0 
  23.  * @date 2014-07-09 11:15:23 
  24.  *  
  25.  */  
  26. public class ConvertBlobTypeHandler extends BaseTypeHandler<String> {    
  27.     //###指定字符集    
  28.     private static final String DEFAULT_CHARSET = "utf-8";    
  29.     
  30.     @Override    
  31.     public void setNonNullParameter(PreparedStatement ps, int i,    
  32.             String parameter, JdbcType jdbcType) throws SQLException {    
  33.         ByteArrayInputStream bis;    
  34.         try {    
  35.             //###把String转化成byte流    
  36.             bis = new ByteArrayInputStream(parameter.getBytes(DEFAULT_CHARSET));    
  37.         } catch (UnsupportedEncodingException e) {    
  38.             throw new RuntimeException("Blob Encoding Error!");    
  39.         }       
  40.         ps.setBinaryStream(i, bis, parameter.length());    
  41.     }    
  42.     
  43.     @Override    
  44.     public String getNullableResult(ResultSet rs, String columnName)    
  45.             throws SQLException {    
  46.         Blob blob = rs.getBlob(columnName);    
  47.         byte[] returnValue = null;    
  48.         if (null != blob) {    
  49.             returnValue = blob.getBytes(1, (int) blob.length());    
  50.         }    
  51.         try {    
  52.             //###把byte转化成string    
  53.             return new String(returnValue, DEFAULT_CHARSET);    
  54.         } catch (UnsupportedEncodingException e) {    
  55.             throw new RuntimeException("Blob Encoding Error!");    
  56.         }    
  57.     }    
  58.     
  59.     @Override    
  60.     public String getNullableResult(CallableStatement cs, int columnIndex)    
  61.             throws SQLException {    
  62.         Blob blob = cs.getBlob(columnIndex);    
  63.         byte[] returnValue = null;    
  64.         if (null != blob) {    
  65.             returnValue = blob.getBytes(1, (int) blob.length());    
  66.         }    
  67.         try {    
  68.             return new String(returnValue, DEFAULT_CHARSET);    
  69.         } catch (UnsupportedEncodingException e) {    
  70.             throw new RuntimeException("Blob Encoding Error!");    
  71.         }    
  72.     }  
  73.   
  74.     @Override  
  75.     public String getNullableResult(ResultSet arg0, int arg1)  
  76.             throws SQLException {  
  77.         // TODO Auto-generated method stub  
  78.         return null;  
  79.     }    
  80. }   


定义上面类之后,在mapper.xml中配置<result property="content" column="CONTENT" typeHandler="cn.ffcs.drive.common.util.ConvertBlobTypeHandler"/>即可。

实体接收使用String接收。

转载自http://blog.csdn.net/p793049488/article/details/37818989


猜你喜欢

转载自blog.csdn.net/t18112925650/article/details/79645574