天天看點

Drools的中文亂碼問題幾個解決辦法

最近一直在研究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的環境參數啦.

設定如下圖:

Drools的中文亂碼問題幾個解決辦法
Drools的中文亂碼問題幾個解決辦法

這樣你的tomat就用utf-8編碼了,可以用System.out.println(System.getProperty("file.encoding"));再測試一下了.

--可是這時候,console中顯示的卻成亂碼了,呵呵,别慌.

tomcat的設定下面還有Launch,如圖:

Drools的中文亂碼問題幾個解決辦法
Drools的中文亂碼問題幾個解決辦法

點選那個按鈕,如圖設定:

Drools的中文亂碼問題幾個解決辦法
Drools的中文亂碼問題幾個解決辦法

如果Default不是"utf-8",就在other中設定utf-8

--最後,Run.關閉之後,再運作時.如下圖:

Drools的中文亂碼問題幾個解決辦法
Drools的中文亂碼問題幾個解決辦法

看到了吧,那個後面有[Custom]的就是你自己定制的,千萬别把它删掉哦!以後可以直接用它運作了.

5.當然網上有人建議修改源碼,我也曾嘗試過,不過本人功力不到,改下來太難了,而且源碼中有很多地方都是使用預設的字元集.

是以修改源碼實為下下之策,而且具體修改位置,你自己看着辦吧,我是無能為力!

希望以上足以幫助道上朋友渡過難關!如果還有問題,可以聯系我!qq:532927863

Drools的中文亂碼問題幾個解決辦法