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