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

富文本编辑器是将样式及内容一起放入数据库,所用数据类型为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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值