北京北大青鳥校區(qū):JSP中文亂碼問題綜述(3)

北京北大青鳥校區(qū)學術部提供:

擴展閱讀:JSP中文亂碼問題綜述(2)

3,表單get提交方式的亂碼處理方式。
如果使用get方式提交中文,接受參數(shù)的頁面也會出現(xiàn)亂碼,這個亂碼的原因也是tomcat的內(nèi)部編碼格式iso8859-1導致。Tomcat會以get的缺省編碼方式iso8859-1對漢字進行編碼,編碼后追加到url,導致接受頁面得到的參數(shù)為亂碼/。

北京北大青鳥校區(qū)老師提供解決辦法:
A,使用上例中的第一種方式,對接受到的字符進行解碼,再轉(zhuǎn)碼。
B,Get走的是url提交,而在進入url之前已經(jīng)進行了iso8859-1的編碼處理。要想影響這個編碼則需要在server.xml的Connector節(jié)點增加useBodyEncodingForURI=true
屬性配置,即可控制tomcat對get方式的漢字編碼方式,上面這個屬性控制get提交也是用 request.setCharacterEncoding(UTF-8)所設置的編碼格式進行編碼。所以自動編碼為utf-8,接受頁面正常接受就可以了。但我認為真正的編碼過程是,tomcat又要根據(jù)
<Connector port=8080
maxThreads=150 minSpareThreads=25 maxSpareThreads=75
enableLookups=false redirectPort=8443 acceptCount=100
debug=0 connectionTimeout=20000 useBodyEncodingForURI=true
disableUploadTimeout=true URIEncoding=”UTF-8”/>
里面所設置的URIEncoding=”UTF-8”再進行一次編碼,但是由于已經(jīng)編碼為utf-8,再編碼也不會有變化了。如果是從url獲取編碼,接受頁面則是根據(jù)URIEncoding=”UTF-8”來進行解碼的。

4,上傳文件時的亂碼解決
上傳文件時,form表單設置的都是enctype=multipart/form-data。這種方式以流方式提交文件。如果使用apach的上傳組件,會發(fā)現(xiàn)有很多亂碼現(xiàn)象。這是因為apach的先期commons-fileupload.jar有bug,取出漢字后進行解碼,因為這種方式提交,編碼又自動使用的是tomcat缺省編碼格式iso-8859-1。但出現(xiàn)的亂碼問題是:句號,逗號,等特殊符號變成了亂碼,漢字如果數(shù)量為奇數(shù),則會出現(xiàn)亂碼,偶數(shù)則解析正常。

解決方式: 下載commons-fileupload-1.1.1.jar 這個版本的jar已經(jīng)解決了這些bug。但是取出內(nèi)容時仍然需要對取出的字符進行從iso8859-1到utf-8轉(zhuǎn)碼。已經(jīng)能得到正常所有漢字以及字符。(北京北大青鳥校區(qū),未完)

北大青鳥網(wǎng)上報名
北大青鳥招生簡章