相信在使用Pentaho CDE的时候乱码问题让很多人很头疼
经过长时间的调试和源码阅读终于找到了解决乱码的方法下面和大家分享一下!
1、导致乱码的原因:
为什么会出现乱码呢,是因为数据在传递的时候编码不一致,那么解决的方法就是找到哪个地方的编码和别的地方的不一致(找到这一点很关键)
2、Pentaho CDE 乱码的现像
通过 CDE生成的Dashboard 在Pentaho BIServer中浏览或展示时会出现乱码,而用CDE自己的API获取的HTML内容是不会乱码的。
注: 可能通过http://IP:PORT/pentaho/plugin/pentaho-cdf-dd/api/renderer /getContent?solution=home&path=admin&file=demo1.wcdf查看CDE生成的HTML 内容
可以通过http://IP:PORT/pentaho/plugin/pentaho-cdf-dd/api/renderer/render?solution=home&path=admin&file=demo1.wcdf&root=IP:PORT查看CDE生成的整个页面
3、查找原因
根据2中的现像很有可能是CDE中的编码和Pentaho BIServer中的编码不一致,经过分析和查看源码发现 CDE中的编码为utf-8(通过硬编码的可以在)而Pentaho BIServer 默认的编码也是utf-8,并且我已经显式的设置成了utf-8,显然CDE和Pentaho BIServer的编码是一致的,这样问题的范围缩小很多了,可以断定数据在CDE中没有乱码如果CDE直接传给Pentaho BIServer也不会乱码(因为CDE和Pentaho BIServer的编码上一致的),那么乱码的可能就是数据从CDE传递到Pentaho BIServer的时候用不是直接传递的而是通过别的工具类或在这之前进行了转换。通过查看源码发现:
CDE pt.webdetails.cdf.dd.DashboardDesignerContentGenerator类的createContent方法中将从CDE生成的HTML内容传递到了Pentaho中(通过Response传过去的)。但是CDE用的是 org.apache.commons.io.IOUtils.write(String str,OutputStream st)方法将CDE生成的内容写到Respose输出流
问题就在这里IOUtils.write(String str,OutputStream st) 这个方法用到了java.io包下的类它们的编码是由JVM中的file.encoding决定的查看file.encoding的编码为GBK(其实IOUtils.write 还有一个重载方法IOUtils.write(String str,OutputStream st,String encoding)如果用这个方法就可以设置写入流时的编码格式而不使用file.encoding中的值但是CDE没有使用这个方法)
4、解决方法
问题已经找到那么解决方法也就出来了这里有两种解决方法
解决方法一、将file.encoding的值由GBK改为utf-8具体方法 在Tomcat的catalina.bat(linux 为catalina.sh)的JAVA_OPTS中加入-Dfile.encoding 设置为 set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8(仅windows)
解决方法二、重写DashboardDesignerContentGenerator类的createContent方法将IOUtils.write(result, getResponse().getOutputStream());换成IOUtils.write(result, getResponse().getOutputStream(),getResponse().getCharacterEncoding());
OK、到这里CDE的乱码问题已经解决 来一个效果图:
本人接触Pentaho时间不长如果文中有错误望高手指出谢谢!
如果对文中有疑问请联系我
我的Email:zhaizhisheng@sian.com
相关推荐
【标题】:“Pentaho CDE 整合 Birt” 【描述】: Pentaho CDE(Component Development Environment)是Pentaho BI平台中的一个工具,用于构建交互式的Web仪表板。它允许开发者通过拖放的方式创建数据可视化应用,...
BTable是Pentaho社区仪表板设计器(CDE)的组件,该组件扩展了具有OLAP功能的标准表组件,并提供了新的钻取体验。 仪表板用户可以通过上下文菜单轻松地与表格进行交互,该菜单允许:-添加,更改或删除维度-添加,...
Pentaho_Kettle_解决方案_-_使用_PDI_构建开源_ETL_解决方案
Pentaho GMaps Overlay是一款专为Pentaho CDE(Community Dashboard Editor)设计的开源插件,它极大地扩展了仪表板的可视化能力,特别是在地理数据分析领域。通过此插件,用户能够利用Google Maps的Overlays功能,...
- 构建成功后, 在 `{cde}\assemblies\platform\pentaho-cdf-dd\target` 下找到 `pentaho-cdf-dd-8.1.0.0-SNAPSHOT.zip` 文件, 解压后将 `pentaho-cdf-dd` 文件夹拷贝并替换 `{pentaho-server}\pentaho-solutions\...
我当前调试的是kettle 5.4.0.1版本,修复job中发送邮件时候中文乱码问题: 替换 data-integration\lib\kettle-engine-5.4.0.1-130.jar 这个jar包下 data-integration\lib\kettle-engine-5.4.0.1-130.jar\org\...
Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案.part2
《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》介绍的PDI(Kettle)是一种开源的 ETL 解决方案,书中介绍了如何使用PDI来实现数据的剖析、清洗、校验、抽取、转换、加载等各类常见的ETL类工作。 除了ODS/DW...
- 学习如何阅读和分析Pentaho的日志文件,以诊断和解决问题。 - 监控与调试:使用Pentaho提供的监控工具,例如Pentaho Diagnostics和JMX监控。 7. **源码与社区支持** - Pentaho是开源项目,因此源码可用性允许...
Pentaho CDE仪表板的实用程序库 目的 建立这个库的目的是集中进行仪表板自定义的知识,并使开发过程的成本降低。 用法 该库被认为可以在requirejs仪表板上使用。 在CDE上,通过将OncaseUtils.js OncaseUtils.js为...
maven编译pentaho-big-data-plugin遇到的所有问题解决,pentaho6.0
《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》主要介绍如何使用开源ETL工具来完成数据整合工作。 《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》介绍的PDI(Kettle)是一种开源的 ETL 解决方案...
Pentaho社区仪表板设计器(CDE)的无处不在的组件。 视频教程及更多信息,请 。 BTable是根据。 该插件是使用。 有关安装的说明 关于BTable版本编号的注意事项: Pentaho 7.0使用较新版本的Spring平台。 这就是...
《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》主要介绍如何使用开源ETL工具来完成数据整合工作。 《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》介绍的PDI(Kettle)是一种开源的 ETL 解决方案,...
《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》是一本专注于介绍如何利用Pentaho Data Integration (PDI)工具进行数据提取、转换和加载(ETL)的书籍。PDI,通常被称为Kettle,是Pentaho BI Suite的一部分...
《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》主要介绍如何使用开源ETL工具来完成数据整合工作。 《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》介绍的PDI(Kettle)是一种开源的 ETL 解决方案,...
Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案.part1
Pentaho Kettle解决方案 使用PDI构建开源ETL解决方案,分享给所有需要的人!
这些问题使得许多企业无法实施商业智能解决方案,而 Pentaho 的出现正是为了解决这些问题。 3. 传统的解决方法以及他们的缺点 传统的商业智能解决方案通常是基于闭源码的,需要高昂的成本和复杂的实施过程。此外,...