groovy:groovyservlet 乱码问题,解决
配置好groovyservlet就可以开始用groovy脚本写网站程序了. 真的很方便,边写边调试,性能也挺好 ,比PHP强多了. 不足的就是 java比较消耗内存. ? 可是有一个问题不爽,好在我已经解决了: groovy脚本里写了中文,就会出现乱码.(容器是Tomcat 6.1.6) 如果把文件保存为UTF-8不代BOT 貌似有时可以正常; 如果把文件保存为UTF-8带BOT,直接就不能运行了; 如果把文件保存为GBK,首次访问时会乱码,修改一次后被scriptEngine发现后,居然就不乱码了! ? (另外,如果把容器换成resin 4,UTF-8带BOT是可以正常运行的,看来问题与tomcat还是有些关系;不过,resin不熟悉,貌似必须安装成系统服务,而且控制台也不知道在哪里) ? 几经调试,我已经解决了这个问题: 修改这个文件 D:repogroovygroovy-1.7.2srcmaingroovyutilGroovyScriptEngine .java (D:repogroovygroovy-1.7.2是groovy 1.7.2的源代码) 的如下部分: public Class loadScriptByName(String scriptName) throws ResourceException,ScriptException { URLConnection conn = rc.getResourceConnection(scriptName); String path = conn.getURL().getPath(); ScriptCacheEntry entry = scriptCache.get(path); Class clazz = null; if (entry!=null) clazz=entry.scriptClass; if (isSourceNewer(entry)) { try { String encoding = conn.getContentEncoding() != null ? conn.getContentEncoding() : "UTF-8"; //clazz = groovyLoader.parseClass(DefaultGroovyMethods.getText(conn.getInputStream(),encoding),conn.getURL().getPath()); clazz = groovyLoader.parseClass(DefaultGroovyMethods.getText(conn.getInputStream()),conn.getURL().getPath()); System.out.println(String.format("GroovyScriptEngine:(%s)脚本有更新,重新装载...",scriptName)); } catch (IOException e) { throw new ResourceException(e); } } return clazz; } System.out.println(String.format("GroovyScriptEngine:(%s)脚本有更新,重新装载..." ,scriptName));? 这一行,是我加进去的,起个调试的作用. 上一行就是修改过的; 再上一行就是原来的. ? 很简单,就是把encoding参数去掉就行了. 因为getText默认就是按系统本地编码来做的. ? 外国佬本来是想把它做成兼容双字节的,可惜估计他们自己也没去测试,或者根本不知道怎么输入汉字来测试,结果反而不能很好地支持汉字. 我这一改,省事了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |