<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    探討Java技術(shù),努力學(xué)習(xí),分享心得

    我不是技術(shù)控,拿來主義其實也挺好,但是一定要有自己的想法

    統(tǒng)計

    留言簿

    閱讀排行榜

    評論排行榜

    Drools中文亂碼解決

         項目中用到了規(guī)則引擎,后來選用了drools開源的實現(xiàn),后來部署的linux環(huán)境后亂碼,在本地不亂碼,所以第一時間就想到了應(yīng)該是drools內(nèi)部取了操作系統(tǒng)默認(rèn)的編碼了 。凡是亂碼基本上是字節(jié)和字符之間相互轉(zhuǎn)換的時候出現(xiàn)的,經(jīng)過仔細(xì)排查,發(fā)現(xiàn)將規(guī)則文件加入到session里面的時候沒有給編碼,于是加上。

    加載規(guī)則文件的時候必須指定編碼,比如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");

    加上這一處編碼還是不行,后來發(fā)現(xiàn)我們用的decisiontable的解碼是用的jxl,在網(wǎng)上看,jxl的解析也有可能產(chǎn)生亂碼,于是加上:
    給容器啟動的時候設(shè)置jxl的編碼
    System.setProperty("jxl.encoding", "UTF-8");

    加上這兩個系統(tǒng)參數(shù),也是亂碼,經(jīng)過調(diào)試發(fā)現(xiàn),org.drools.rule.builder.dialect.java.JavaDialect類里面的addClassCompileTask方法有將字符超字節(jié)轉(zhuǎn)換的代碼,如下:
    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方法的實現(xiàn),這個方法里面默認(rèn)取平臺的編碼的,至此,我們就知道病根了,所以比較簡單了,加上-Dfile.encoding=UTF8參數(shù)就可以了。注意,這個地方是UTF8,不是UTF-8,具體的解釋看官方文檔: http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html,最后這個也是在tomcat的啟動參數(shù)里面加上-Dfile.encoding=UTF8
    • 在tomcat的啟動
      catalina.bat/
      catalina.sh
      參數(shù)里面加上-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測試的時候加上這個參數(shù)-Dfile.encoding=UTF-8
    如果不加這個測試,在junit跑測試的時候還會使用操作系統(tǒng)的默認(rèn)字符集,會導(dǎo)致測試失敗:
                              <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>

    這里亂碼問題告一段落!





    posted on 2015-02-04 15:22 瞿祥軍 閱讀(5560) 評論(2)  編輯  收藏

    評論

    # re: Drools中文亂碼解決 2015-02-06 09:20 京山游俠

    莫非你部署的Linux系統(tǒng)不是采用的UTF-8?
    用Java有點不爽的就是有點事就要翻源代碼。  回復(fù)  更多評論   

    # re: Drools中文亂碼解決 2016-01-07 09:37 licao

    逗B軍, wro.xml是干嘛的  回復(fù)  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 特级毛片全部免费播放| 一个人看的www免费视频在线观看| 四虎影库久免费视频| 一个人免费观看视频在线中文| 亚洲AV无码一区二区乱子伦| 国产精品成人免费一区二区| 色妞www精品视频免费看| 久久精品国产亚洲av麻| 国产精品免费看久久久久| 99在线视频免费观看| 国产精品亚洲一区二区麻豆| 亚洲午夜国产精品无码老牛影视| av无码免费一区二区三区| 免费无码午夜福利片69| 亚洲欧洲校园自拍都市| 奇米影视亚洲春色| 日本一区免费电影| 1000部羞羞禁止免费观看视频| 特级毛片免费播放| 亚洲人成77777在线观看网| 亚洲国产三级在线观看| 国产免费AV片无码永久免费| 久久99国产乱子伦精品免费| 日日狠狠久久偷偷色综合免费| 亚洲国产成人超福利久久精品| 自拍偷自拍亚洲精品被多人伦好爽 | 国精无码欧精品亚洲一区 | 日本免费人成黄页在线观看视频 | 国内永久免费crm系统z在线| 亚洲欧美综合精品成人导航| 久久久久亚洲AV无码麻豆| 国产亚洲精品成人a v小说| 国产美女无遮挡免费视频| 久久福利资源网站免费看| 久久免费看少妇高潮V片特黄| 男女交性无遮挡免费视频| 亚洲熟妇无码AV不卡在线播放| 亚洲午夜视频在线观看| 亚洲精品午夜无码电影网| 亚洲毛片av日韩av无码| 暖暖在线日本免费中文|