V4 乱码问题总结 v5 也可以参考
乱码问题是在 java 的 web 应用中经常遇到的问题,因为报表是用 java 开发的,所以乱码问题经常出现在报表系统中。乱码问题大致可以分为 7 个方面:1. 页面乱码;2. 导出文件乱码;3. 参数乱码;4. 报表中文名乱码;5.olap 内容乱码;6. 填报乱码;7. 日志文件乱码。不同的现象有不同的解决方法。
一.页面显示乱码
1.页面汉字显示乱码
现象:数据库中存储的内容不是乱码,但是用报表查询出来后,页面中汉字显示为乱码。
原因:数据库取数时没有转码
解决方法:在 WEB-INF/reportConfig.xml 文件中的 dataSource 节点,设置转码。
dataSource 表示用户在 WEB 应用中要用到的数据源配置,其格式如下:
数据源的 JNDI 名称, 数据库类型 [, 取数时是否需要转换编码, 数据库字符集编码, 显示报表时的字符集编码][,SQL 是否需要转码];[重复]……。reportConfig.xml 中的 jspCharset 节点设置、jsp 页面设置<%@ page contentType=”text/html;charset=UTF-8″ %>和 request.setCharacterEncoding(”UTF-8″) 这几个 charset 最好设置成一样的编码。
2.统计图乱码
现象:统计图的报表在网页上发布时,统计图里的汉字会变成小方框
原因:是因为服务器端操作系统的中文安装包没有装全,导致报表里用到的字体在服务器端的操作系统里找不到,因此成了小方块。
解决方法:安装中文字体
(一)办法一、拷贝中文字体:
(1)、 在启动 java 的时候加入如下参数,参数值为 jdk 的安装路径 -Dsun.java2d.fontpath=……/j2se/jre/lib/fonts
(2)、 操作系统安装完整的中文安装包,然后把操作系统的中文字体文件拷贝到……/j2se/jre/lib/fonts 目录下
(3)、 打开……/j2se/jre/lib 目录下的 font.properties 文件,把新添加的字体文件的对照信息加进该文件即可
(4)、 重起 webserver
(二)办法二、安装中文包:
(1)、 操作系统安装完整的中文安装包
(2)、 卸载 jdk,重新安装,让 jdk 读取新的中文字体文件
总结:首先检查 reportCongfig.xml 中 dataSource 参数配置和 jspCharset,以及页面编码设置,如果这几项都设置了,还是乱码,那就是中文字体没有安装全,在 web 服务器的操作系统上安装中文字体。
二.导出文件乱码
1.导出 pdf 乱码
应用部署在 windows 系统上导出 pdf 正常,部署在 AIX 系统上导出 pdf 出现乱码,原因是中文字符集没有安装全的缘故。
解决方法 1:在设计器中将报表字体改为宋体。
解决方法 2:同统计图乱码问题解决方法
2. 导出 excel 乱码
如果客户导出 excel 乱码,很可能是客户用的 jar 比较旧,给客户更新 report4.jar 和 poi2.jar 包。
3.导出 word 乱码
如果客户导出 excel 乱码,很可能是客户用的 jar 比较旧,给客户更新 report4.jar 和 itext2_rq.jar 包。
总结:如果导出 pdf 乱码,查看一下服务器的中文字体是否安装全。报表对 excel 和 word 的支持的比较好,一般不会出现乱码,如何出现乱码,更换新包。
三. 参数乱码
传参数的时候,经常会碰到乱码问题,下面对常见的几种解决方法做一下总结:
参数传到接收页面是否乱码,可以先让客户在接收参数的 jsp 页面将接收到的参数打印出来,确认是否已经是乱码了。如果已经乱码了,有以下一些方法来解决。
1.在页面接受参数的代码前加上转码语句。 request.setCharacterEncoding(“GBK”);
2.客户页面的编码是 utf-8 建议客户将接收到的参数进行转码 String name = new String(request.getParameter(“name”).getBytes(“gb2312”),”utf-8”);
客户页面的编码是 GBK String arg1 = new String(request.getParameter(“arg1”).getBytes(“GB2312”),”GBK”);
3.http 请求中,带参数 修改应用服务器的配置文件。如 tomcat 的 server.xml 文件 <!– Define a non-SSL HTTP/1.1 Connector on port 8080 –> 加上最后的 uriEncoding 就 OK 了
4. 做负载均衡的时候,参数乱码 修改应用服务器的配置文件。如 tomcat 的 server.xml 文件 <!– Define an AJP 1.3 Connector on port 8009 –> 加上最后的 uriEncoding 就 OK 了
注意:3 和 4 修改的是 server.xml 文件中不同的地方。
5. 传递中文参数的时候,如果出现乱码,特别是双数中文正常,单数中文乱码的情况,可以尝试用如下办法解决: (1)、客户端编码,使用 js 方法 function encode(obj){obj.value=encodeURI(obj.value); } (2)、服务端解码,使用 java 类方法 keyword = java.net.URLDecoder.decode(keyword, “UTF-8″);
总结:把上次说的 3 和 4 设置好,一般就不会出现乱码了。
四.报表中文名乱码
1. 报表名为中文时报错
报表名称为中文,报错
现象,报:读报表文件失败:????????±¨±í_arg.raq,web 服务器为 tomcat。报表名称是通过参数传递给 jsp 的,tomcat 默认编码格式是 ISO-8859-1,传递中文参数的时候容易产生乱码。解决方法:在 tomcat 的 server.xml 配置端口的地方添加 URIEncoding=”GBK”。
总结:最好的解决办法就是不用中文命名报表。
2.打印乱码
报表名为中文名时打印出现乱码,现象:展现、导出正常,只是打印报“读报表文件失败”,如果客户用 report4.jar 是 2009-04 之前的,给客户更新 report4.jar 和 runqianReport4Applet.jar,新版本问题已经解决。
六.填报乱码
1. 普通填报乱码
现象:填报表保存中文后,发现数据库中存放的是乱码。
原因:没有设置是否需要转码或设置的字符编码不正确
解决方法:在 reportConfig.xml 中的 dataSource 节点设置编码和是否需要转码,6 个参数最好都设置上。
2. Excel 导入乱码
现象:excel 中含有汉字,导入保存后,发现数据库中存为乱码。
原因:字体设置不对或者编码设置不对
解决方法:如果普通填报表填报中文正常,就把单元格的字体设置为宋体。
七.日志文件乱码
报表中 log4j 在英文版 linux 下输出中文日志为乱码。由于 log4j 配置文件(runqianReportLog.properties)中没有设置编码格式 (encoding),所以 log4j 就使用系统默认编码,导致乱码。
解决方法是设置编码格式 UTF-8, 方法为:
log4j.appender.LOG1.encoding=UTF-8
如果添加后,还是乱码,就在服务器端安装中文字体。