潤乾中亂碼問題解決方法總結

亂碼問題是在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 –> <Connector port=”8080″ maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”GBK”/> 加上最後的uriEncoding就OK了

4.做負載均衡的時候,參數亂碼 修改應用服務器的配置文件。如tomcat的server.xml文件 <!– Define an AJP 1.3 Connector on port 8009 –> <Connector port=”8010″ enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ URIEncoding=”GBK”/> 加上最後的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,新版本問題已經解決。

五.Olap內容亂碼

現象:olap展示出來的效果中存在亂碼

原因:頁面沒有設置編碼,或頁面設置編碼不一致

解決方法:在jsp中增加“request.setCharacterEncoding( ”編碼方式” );“,查看是否和jsp頭“<%@ page contentType=”text/html;charset=編碼方式” %>”設置的編碼方式一致。

一個現象: jsp頁面編寫的很簡單和咱們文檔中的例子沒什麼差別,reportConfig.xml中的配置也沒有問題,數據庫編碼也沒有問題,這個問題的原因比較隱蔽,後來發現是客戶編寫jsp文件的時候默認存成了utf-8編碼的文件。

解決方法:把發佈olap的jsp另存爲GBK編碼的文件再發布問題就解決了。

 

六.填報亂碼

1.普通填報亂碼

現象:填報表保存中文後,發現數據庫中存放的是亂碼。

原因:沒有設置是否需要轉碼或設置的字符編碼不正確

解決方法:在reportConfig.xml中的dataSource節點設置編碼和是否需要轉碼,6個參數最好都設置上。

2. Excel導入亂碼

現象:excel中含有漢字,導入保存後,發現數據庫中存爲亂碼。

原因:字體設置不對或者編碼設置不對

解決方法:如果普通填報表填報中文正常,就把單元格的字體設置爲宋體。

 

七.日誌文件亂碼

報表中log4j在英文版linux下輸出中文日誌爲亂碼。由於log4j配置文件(runqianReportLog.properties)中沒有設置編碼格式(encoding),所以log4j就使用系統默認編碼,導致亂碼。

解決方法是設置編碼格式UTF-8,方法爲:

log4j.appender.LOG1.encoding=UTF-8

如果添加後,還是亂碼,就在服務器端安裝中文字體。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章