`

drools中文乱码解决

阅读更多

         项目中用到了规则引擎,后来选用了drools开源的实现,后来部署的linux环境后乱码,在本地不乱码,所以第一时间就想到了应该是drools内部取了操作系统默认的编码了。

         首先我们知道,凡是乱码基本上是字节和字符之间相互转换的时候出现的,经过仔细排查,发现将规则文件加入到session里面的时候没有给编码,于是加上。

  •  加载规则文件的时候必须指定编码,比如UTF-8
    中文乱码代码:
    Reader reader = new FileReader(new File("F:/WorkFolder/drools/drl/addpoint.drl"));
    解决方法:
    Reader reader = new InputStreamReader(new FileInputStream("F:/WorkFolder/drools/drl/addpoint.drl"),"UTF-8");
     加上这一处编码还是不行,后来发现我们用的decisiontable的解码是用的jxl,在网上看,jxl的解析也有可能产生乱码,于是加上
  • 给容器启动的时候设置jxl的编码
    System.setProperty("jxl.encoding", "UTF-8");
     加上这两个系统参数,也是乱码,经过调试发现,org.drools.rule.builder.dialect.java.JavaDialect类里面的addClassCompileTask方法有将字符超字节转换的代码,如下:
     public void addClassCompileTask(final String className,
                                         final BaseDescr descr,
                                         final String text,
                                         final MemoryResourceReader src,
                                         final ErrorHandler handler) {
    
            final String fileName = className.replace( '.',
                                                       '/' ) + ".java";
            try {
            	 if (src != null) {
                     src.add( fileName,
                              text.getBytes() );
                 } else {
                     this.src.add( fileName,
                                   text.getBytes() );
                 }
            } catch (final UnsupportedEncodingException e ) {
               throw new RuntimeException("unable to encoding the rule!");
            }
           
    
            this.errorHandlers.put( fileName,
                                    handler );
    
            addClassName( fileName );
        }
     我们再来看一下String的getBytes方法的实现,这个方法里面默认取平台的编码的,至此,我们就知道病根了,所以比较简单了,加上-Dfile.encoding=UTF8参数就可以了,注意,这个地方是UTF8,不是UTF-8,具体的解释看官方文档: http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html,最后这个也是在tomcat的启动参数里面加上-Dfile.encoding=UTF8
  • 在tomcat的启动参数里面加上-Dfile.encoding=UTF8

     CATALINA_OPTS="-Xmx1024m -Xms1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Xss128k -server -Xdebug -Xnoagent -Djav

a.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8530 -Dfile.encoding=UTF8"

 

  • 在maven跑junit测试的时候加上这个参数-Dfile.encoding=UTF-8

     如果不加这个测试,在junit跑测试的时候还会使用操作系统的默认字符集,会导致测试失败

<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<groupId>org.apache.maven.plugins</groupId>
				<version>2.11</version>
				<configuration>
					<argLine>-Dfile.encoding=utf-8</argLine>
					<parallel>methods</parallel>  
        			<threadCount>10</threadCount>  
					<includes>
						<include>**/*Test.java</include>
					</includes>
					<excludes>
						<exclude>**/BaseControllerTest.java</exclude>
						<exclude>**/BaseTest.java</exclude>
						<exclude>**/TestUtils.java</exclude>
					</excludes>
				</configuration>
			</plugin>

 

    

           

4
5
分享到:
评论
5 楼 asialee 2013-12-05  
nageqd 写道
有点看到不明白了,我在JVM后加上了-Dfile.encoding=UTF8
打印显示出来的也是UTF-8了但是为什么还是有问题呢?

你的具体是什么问题?
4 楼 nageqd 2013-12-05  
有点看到不明白了,我在JVM后加上了-Dfile.encoding=UTF8
打印显示出来的也是UTF-8了但是为什么还是有问题呢?
3 楼 asialee 2013-12-02  
董瑞龙 写道
写的真好,我现在还一直被drools乱码困扰,都是使用操作系统默认编码

其实不光是drools,很多框架都有这样的问题,关键是这个参数-Dfile.encoding=UTF8,这个太坑爹了
2 楼 董瑞龙 2013-12-02  
写的真好,我现在还一直被drools乱码困扰,都是使用操作系统默认编码
1 楼 chen8ch 2013-08-24  
你好,最近在学习drools , 有一个叫“working Memory ”的术语, 
麻烦帮我解答一些 ,谢谢

相关推荐

    drools4.0.7 utf-8中文乱码.doc

    drools 4.0.7 中文乱码解决方案 Drools 是一个基于 Java 的规则引擎,用于业务规则管理和决策管理。然而,在使用 Drools 4.0.7 版本时,可能会遇到中文乱码的问题。该问题是由于 Drools 的源代码中没有正确地处理 ...

    Drools7_PDF教程 Drools中文文档 内容全面.zip

    Drools7_PDF教程 Drools中文文档 内容全面。 1. 内容更加全面,更多细节,更多知识点全部在新版本中有所体现,并且会附上小编做的例子 ,更多内容不断更新中 2. 目前国内最全的Drools中文文档。也是目前国内唯一一本

    drools7.25中文文档+drools技术指南.zip

    在Drools7.25中文文档中,你可以找到以下关键知识点: 1. **Drools概述**:这部分将介绍Drools的基本概念,包括什么是规则引擎,为什么需要规则引擎,以及Drools在业务流程中的作用。它会阐述Drools如何帮助开发者...

    drools drools drools drools drools

    drools 是一个强大的规则引擎和业务规则管理系统,用于在Java应用程序中实现复杂的业务逻辑。它基于规则推理,允许用户以声明式的方式定义规则,并在运行时执行这些规则。drools 提供了一个高效的决策自动化框架,...

    Drools6 和 Drools7技术指南-中文文档.zip

    Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java

    Drools7.25中文文档.7z

    《Drools 7.25中文文档》是针对Java开发者的重要参考资料,它详细阐述了Drools这一强大规则引擎的使用方法。Drools是一个开源的业务规则管理系统,它基于Java平台,允许开发者轻松地在应用程序中实现复杂的业务规则...

    drools-7.10中文技术文档.pdf

    drools 最新文档 7.10 规则引擎中文文档,含 规则可视化操作说明,规则配置说明等; Drools 实现和提供了 Rete 算法;也曾提供 Leaps,但因为它无人维护而撒销了。Drools Rete 实现也被称为 ReteOO

    规则引擎Drools 中文使用教程

    ### 规则引擎Drools 中文使用教程 #### Drools简介 Drools是一款功能强大的开源业务规则管理系统(BRMS),它支持业务规则管理、业务流程管理和复杂事件处理等功能。Drools最初是一个独立的项目,后来被JBoss收购...

    我的drools3

    我的drools3

    drools 7.1中文文档pdf完整版本

    综上所述,Drools 7.1中文文档将详细介绍了如何使用该规则引擎进行规则的创建、管理和执行,以及相关的开发细节和技术指南。这些知识点对于希望深入了解和利用Drools进行业务逻辑自动化和智能化的开发者来说是非常...

    Drools中文文档

    Drools中文文档6.5版本的发布,提供给中文用户一份详尽的指南,来学习如何使用这个强大的工具。 首先,文档介绍了Drools的基本概念,包括Drools的简介、卷入社区的方式,以及如何安装和设置Drools Core和IDE。文档...

    Drools开发最全中文版技术指南

    Drools是一个基于Java的开源规则引擎,它允许开发者将业务决策逻辑从业务代码中分离出来,并以规则的形式进行管理。它源于一个叫做Codehaus的开源项目,后来被纳入JBoss门下,并更名为JBossRules。Drools在JBoss应用...

    drools6.2 中文文档

    ** Drools 6.2 中文文档概述** Drools 是一个开源的业务规则管理系统(BRMS),它基于Java平台并遵循JBoss社区的开发。Drools 6.2 版本是该系统的一个重要里程碑,提供了强大的规则引擎和工作流引擎,使企业能够以...

    Drools

    Drools是一款强大的Java规则引擎,它为业务规则管理提供了高效、灵活且可扩展的解决方案。作为基于模型的决策自动化工具,Drools允许开发者将复杂的业务逻辑编码为一系列易于理解和维护的规则,这些规则可以独立于...

    drools文档教程-规则引擎文档

    Drools 规则引擎是一种基于 Java 的开源规则引擎,主要用来解决复杂的业务逻辑问题。下面是 Drools 规则引擎在在线申请信用卡业务场景中的应用。 问题引出现有一个在线申请信用卡的业务场景,用户需要录入个人信息...

    规则引擎Drools使用手册(中文)

    - **动态salience值支持**:增强了规则冲突解决方案的灵活性。 - **参数化查询支持**:实现了参数化查询功能,提高查询效率。 - **暂停命令支持**:允许暂停规则执行。 - **顺序执行模式支持**:增加了顺序执行规则...

    drools最全中文文档

    drools入门规则引擎,内含决策表,经测可用,比较适合入门者学习,决策树亦可以指导非IT人员操作。 决策表使用起来有点麻烦,需要和业务部门多沟通(密码:Droolszn

    Drools4.0官方使用手册中文

    《Drools 4.0官方使用手册中文》是一份详尽的指南,旨在帮助用户理解和运用Drools 4.0这一强大的规则引擎。Drools是一个开源的业务规则管理系统(BRMS),它提供了全面的规则处理能力,包括规则的编写、管理和执行。...

Global site tag (gtag.js) - Google Analytics