最近一直在研究Drools這個東西,我相信大多數剛入門的朋友可能都會遇到中文亂碼問題,這着實讓人很頭疼.
我用的是Drools-5.4.0.對于中文亂碼問題已遇到過多次,每次都是花費好長時間才解決掉,現在總結一下:
1.記住,不管你建立的項目是普通的java項目,還是web項目等,最好都選用"utf-8"編碼.
2.如果你的規則隻是在項目内部調用執行的,優先使用如下方式:
Resource r=ResourceFactory.newClassPathResource(path, encoding);
這樣你的規則檔案就會按照你設定的編碼格式去解析.
3.還有一種就是在規則檔案中,set值為中文時出現亂碼.(此方式太過麻煩,我隻在第一次時使用過,後來基本都使用第2種方式解決)
解決方法如下:
rule "rule a"
when
Task(name=="a")
then
resultTask.setTaskChain(new String("任務1,任務4,任務6".getBytes(),"utf-8"));
end
4.遠端調用時,如webservice,我們項目是将規則的執行放在了webservice的服務端,然後另一個項目作為用戶端去調用.
而且規則執行時不能使用第2種方式,于是亂碼又産生了,具體原因是:Drools内部是使用系統預設編碼的,而不是使用"utf-8".
這樣它在window下就是gbk,在linux下又變成utf-8.(這點千萬要注意)
--你可以用如下方式測試:System.out.println(System.getProperty("file.encoding"));
别在main方法下面直接運作,這樣會顯示目前項目設定的編碼.
在伺服器運作,如tomcat下,就會顯示gbk.(這可能是因為伺服器用的是jdk的編碼,jdk又是用系統編碼,這隻是我個人猜測)
這樣的話,規則執行時用的就是gbk,而項目是utf-8,規則檔案當然也是utf-8,于是亂碼又産生了.
--這裡可能有人會說,那項目也直接用gbk不就編碼一緻了嗎?不錯,的确如此,我本人也這樣弄過,确實沒有亂碼了.
但是,你的項目如果最終是要上傳到linux伺服器上的,你就慘了!
--是以說千萬别改,那怎麼辦呢?
将tomcat的編碼設定成utf-8,其實是jdk的環境參數啦.
設定如下圖:

這樣你的tomat就用utf-8編碼了,可以用System.out.println(System.getProperty("file.encoding"));再測試一下了.
--可是這時候,console中顯示的卻成亂碼了,呵呵,别慌.
tomcat的設定下面還有Launch,如圖:
點選那個按鈕,如圖設定:
如果Default不是"utf-8",就在other中設定utf-8
--最後,Run.關閉之後,再運作時.如下圖:
看到了吧,那個後面有[Custom]的就是你自己定制的,千萬别把它删掉哦!以後可以直接用它運作了.
5.當然網上有人建議修改源碼,我也曾嘗試過,不過本人功力不到,改下來太難了,而且源碼中有很多地方都是使用預設的字元集.
是以修改源碼實為下下之策,而且具體修改位置,你自己看着辦吧,我是無能為力!
希望以上足以幫助道上朋友渡過難關!如果還有問題,可以聯系我!qq:532927863