北京北大青鳥校區學術部提供:
擴展閱讀:JSP中文亂碼問題綜述(2)
3,表單get提交方式的亂碼處理方式。
如果使用get方式提交中文,接受參數的頁面也會出現亂碼,這個亂碼的原因也是tomcat的內部編碼格式iso8859-1導致。Tomcat會以get的缺省編碼方式iso8859-1對漢字進行編碼,編碼后追加到url,導致接受頁面得到的參數為亂碼/。
北京北大青鳥校區老師提供解決辦法:
A,使用上例中的第一種方式,對接受到的字符進行解碼,再轉碼。
B,Get走的是url提交,而在進入url之前已經進行了iso8859-1的編碼處理。要想影響這個編碼則需要在server.xml的Connector節點增加useBodyEncodingForURI=true
屬性配置,即可控制tomcat對get方式的漢字編碼方式,上面這個屬性控制get提交也是用 request.setCharacterEncoding(UTF-8)所設置的編碼格式進行編碼。所以自動編碼為utf-8,接受頁面正常接受就可以了。但我認為真正的編碼過程是,tomcat又要根據
<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”再進行一次編碼,但是由于已經編碼為utf-8,再編碼也不會有變化了。如果是從url獲取編碼,接受頁面則是根據URIEncoding=”UTF-8”來進行解碼的。
4,上傳文件時的亂碼解決
上傳文件時,form表單設置的都是enctype=multipart/form-data。這種方式以流方式提交文件。如果使用apach的上傳組件,會發現有很多亂碼現象。這是因為apach的先期commons-fileupload.jar有bug,取出漢字后進行解碼,因為這種方式提交,編碼又自動使用的是tomcat缺省編碼格式iso-8859-1。但出現的亂碼問題是:句號,逗號,等特殊符號變成了亂碼,漢字如果數量為奇數,則會出現亂碼,偶數則解析正常。
解決方式: 下載commons-fileupload-1.1.1.jar 這個版本的jar已經解決了這些bug。但是取出內容時仍然需要對取出的字符進行從iso8859-1到utf-8轉碼。已經能得到正常所有漢字以及字符。(北京北大青鳥校區,未完)