Posted on 2007-05-08 17:21
bluoy 閱讀(2431)
評論(0) 編輯 收藏
項目中使用ibatis以及他的sql-map-config.xml配置文件。
配置文件(包括resource引用的各個xml文件)使用了缺省UTF-8編碼。
在sql中包含了部分雙字節(jié)字符。
調(diào)試期間發(fā)現(xiàn)一奇怪現(xiàn)象,hard coding部分的雙字節(jié)字符在頁面端顯示時亂碼了,而從DB中檢索出來的數(shù)據(jù)卻可以正常顯示。不解。
深入跟蹤以后才明白:ibatis使用了class loader getResourceAsReader方法。
由于getResourceAsReader根據(jù)系統(tǒng)本地字符集自動生成相應(yīng)的Reader,無法指定Reader的字符集。所以得到的文件內(nèi)容并沒有做正確的轉(zhuǎn)碼(UTF-8轉(zhuǎn)碼)。
疑問:因為UTF-8是配置文件的缺省編碼,通常很少改動,所以這種現(xiàn)象應(yīng)該還有其他人發(fā)現(xiàn)才對。有時間調(diào)查一下。
成本:解決該問題約花多半天時間。其中相當部分浪費在一個莫名其妙的org.xml.sax.SAXParseException: Content is not allowed in prolog錯誤上。郁悶。
追記:上述問題經(jīng)查,官方論壇對應(yīng)編號為IBATIS-340, IBATIS-349。在V2.3.0中通過在com.ibatis.common.resources.Resources中追加setCharset()接口解決。