Posted on 2007-05-08 17:21
bluoy 阅读(2429)
评论(0) 编辑 收藏
项目中使用ibatis以及他的sql-map-config.xml配置文件。
配置文件(包括resource引用的各个xml文件)使用了缺省UTF-8编码。
在sql中包含了部分双字节字符。
调试期间发现一奇怪现象,hard coding部分的双字节字符在页面端显示时乱码了,而从DB中检索出来的数据却可以正常显示。不解。
深入跟踪以后才明白:ibatis使用了class loader getResourceAsReader方法。
由于getResourceAsReader根据系统本地字符集自动生成相应的Reader,无法指定Reader的字符集。所以得到的文件内容并没有做正确的转码(UTF-8转码)。
疑问:因为UTF-8是配置文件的缺省编码,通常很少改动,所以这种现象应该还有其他人发现才对。有时间调查一下。
成本:解决该问题约花多半天时间。其中相当部分浪费在一个莫名其妙的org.xml.sax.SAXParseException: Content is not allowed in prolog错误上。郁闷。
追记:上述问题经查,官方论坛对应编号为IBATIS-340, IBATIS-349。在V2.3.0中通过在com.ibatis.common.resources.Resources中追加setCharset()接口解决。