使用FileUpload上傳表單時,常常會遇到中文亂碼,解決這個問題要分兩部分設置,一個是上傳的文件路徑,另一個是文件以外的表單項。具體操作如下:
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
fileUpload.setHeaderEncoding(encoding);
這個只對上傳的文件資源的中文名亂碼有效,但是對於表單字段的中文亂碼無法解決,其實FileItem接口中有另外一個重載的方法:getString(String charset)。該方法可以按照指定的編碼格式,獲得表單項字段的內容,它的定義爲:
public String getString(String charset) throws UnsupportedEncodingException {
return new String(this.get(), charset);
}
因此,我們可以按如下步驟解決中文亂碼問題:
1、在上傳的servlet中取得request的編碼格式:
String encoding=request.getCharacterEncoding(); /
也可以不寫這步,直接指定編碼格式:“UTF-8”或“GBK”
2.解決上傳文件的路徑亂碼問題:
ServletFileUpload sfu = new ServletFileUpload(factory);之後加上:
sfu.setHeaderEncoding(encoding);
3:解決表單字段的亂碼:
String(fileItem.getString(encoding));
比如其中一項表單:
String id1 = fileItem.getString(encoding);
以此類推。
注意:調用String getString(String charset)方法時需要進行異常處理。
4:這時候,如果還有問題,就可能是tomcat的配置問題了,找到server.xml,尋找到如下字段模仿修改即可
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
這幾步完成後,亂碼問題就徹底擺脫掉了~~~