之前看網上有人發帖說有個解決辦法是“在viewservlet.jar下找到org/eclipse/birt/report/utility下找到ParameterAccessor.class文件,現在要修改這個文件的源代碼,
你可以在你從CVS中簽出的源代碼中的org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/utility文件夾中找到ParameterAccessor.java文件,在這個java文件中找到這行:
public static final String UTF_8_ENCODE = "UTF-8"; //$NON-NLS-1$
將這行改為
public static final String UTF_8_ENCODE = "GBK"; //$NON-NLS-1$
然后將這個編譯好的class文件壓縮到viewservlets.jar的同等目錄下,替換原來的文件”,本人也試了這種方法,但沒見湊效,不過上面的解決方法好像是在birt2.1的環境下,這個沒仔細試,也許對birt2.1有效吧。
本人使用birt版本2.3,解決辦法如下:
在JSP中調用BIRT報表時,傳的參數中有中文字符,即URL中包含中文字符,這時在BIRT端接收到的參數拼SQL語句后發現中文字符被轉碼,造成SQL中的條件不正確。
因為在JSP中調用BIRT是在一個JS腳本中,因此要想辦法在JS中先將中文轉成UTF-8,并且在BIRT獲取參數后再將UTF-8轉換回中文即可。
實現代碼:
頁面JS:
Var mychecktype = “中文”;
sqlWhere+="and t.CHECK_TYPE = '"+escape(encodeURI(mychecktype))+"'";
BIRT腳本:
sql+=decodeURI(mycondition);