Drools的中文乱码问题几个解决办法

时间:2022-09-07 23:49:29

最近一直在研究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:532927863Drools的中文乱码问题几个解决办法