Oracle数据库字符集为WE8DEC,报表直接从数据库中取数时,中文乱码。
解决办法:可以使用报表的自定义函数或者集算器的自定义函数对中文进行转码操作。
集算器中脚本:
A3中表达式
=A2.run(invoke(toWe8.toWe8,MAXDESC):MAXDESC,invoke(toWe8.toWe8,MINDESC):MINDESC)
表达式说明:
因为数据库中用的字符集是WE8DEC,通过jdbc取数时会乱码,需要进行一次转码,这里通过自定义函数实现,自定义函数类为toWe8.class,集算器中调用方式为:invoke(toWe8.toWe8,”aaaa”)
在A4中使用集算器中的run函数,结合新增的自定义函数,对原有数据进行转码,此处对两个字段转码,分别为:MAXDESC,MINDESC
点击执行,此时点击A4单元格,在右侧可看到转码后的结果。
PS:放置jar包和class文件时,如果集算器在启动状态,需要重启集算器。
函数源码:
importjava.io.UnsupportedEncodingException;
public class toWe8 {
public static String toWe8(String str) {
Stringwe8="";
try{
if(str==""|| str==null){
return"";
}
else{
we8= new String(str.getBytes("X-ORACLE-WE8MSWIN1252"),"GB2312");
}
}catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return we8;
}
}
注:要使用该功能,要使用oracle的jar包:orai18n.jar,在oracle安装目录下查找或者网上下载即可。