历史版本4 :集成后参数值显示乱码 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

1. 问题描述编辑

报表已集成到Web页面中,通过在页面传递参数至报表中时,会发现有时某些参数值,传递到报表中是显示为问号(???)或乱码等等一系列不能正常显示的情况。

2. 问题原因编辑

这是由于浏览器和报表服务器的编码不同,字符多次进行编码转换时出现错误导致字符的显示出现乱码,尤其是中日韩文和特殊字符更容易出现乱码问题。详细的编码原理,可参考编码文档

3. 解决方案编辑

在给报表服务器发送请求之前,对URL或者只对URL里面的参数名字和参数值,进行cjkEncode的编码,该方式兼容了各种不同的字符集,如ISO8859-1、 UTF-8、 GBK、 ENU_JP,尤其对中日韩文的处理采取了统一的方案。

4. javascript中FineReport字符转换原理编辑

在给报表服务器发送请求之前,对URL或者只对URL里面的参数名字和参数值,进行cjkEncode的编码。源码如下:
HTML/XML代码
function cjkEncode(text) {       
    if (text == null) {       
        return "";       
    }       
    var newText = "";       
    for (var i = 0; i < text.length; i++) {       
        var code = text.charCodeAt (i);        
        if (code >= 128 || code == 91 || code == 93) {//91 is "[", 93 is "]".       
            newText += "[" + code.toString(16) + "]";       
        } else {       
            newText += text.charAt(i);       
        }       
    }       
    return newText;       
}   
经过编码的URL或者Form表单,报表服务器智能的将这些字符正确的转换过来。
cjkEncode方法在FineReport的JS库中已经预先提供了,用户只要加载了FR的JS库,就可以使用FR.cjkEncode对中日韩文字符进行encode,如下示例:

5. 示例编辑

5.1 对URL进行cjkEncode
HTML/XML代码
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=GBK">  
<script type="text/javascript"  src="ReportServer?op=emb&resource=finereport.js"></script>  
<Script Language="JavaScript">               
function frOpen() {     
    window.location=FR.cjkEncode("http://localhost:8075/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt&地区=华东");         
}         
</Script>  
</head>  
<body>  
<input type="button" value="字符转换1" >  
</body>  
</html>  
如果只对参数值进行编辑转换,在参数后面调用FR.cjkEncode()方法,如:
HTML/XML代码
window.location="http://localhost:8075/WebReport/ReportServer?reportlet=reportname.cpt