Posted on 2007-05-08 17:21
bluoy 閱讀(2431)
評論(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()接口解決。