上幾天,要做Jsp文件上傳,上網Google了幾下,發現多是用JspSmartUpload組件來實現上傳,于是想將其應用到我的Struts應用里頭,剛開始不太會用,隨便寫了個表單頁面,就一個文件表單域,上傳,OK,正確接收,但當應用到自已的項目里時,發現其它表單的信息出現亂碼了,中文問題又出來了。
但是確定是加上了這句:enctype="multipart/form-data",還是不行,文件是可以正確獲取了,只是其它的Text Input表單傳來的中文怎么轉換編碼都不行,不能正確還原中文,我用的是UTF-8編碼。我想,這應該是JspSmartUpload的問題吧,上網找了找,很多都沒說過這問題,有很多文章都是說教你怎么用JspSmartUpload上傳文件等等的,但那些例子都是只上傳一個文件表單,沒有混合上傳與普通表單的信息。
郁悶了半天,既然是組件的問題,我想到想看看修改它的源碼來實現中文混合表單上傳,我下載下來的都是Jar包的,都是已編譯好的,又沒時間上網找源碼了,只好反編譯一下,修改,再重新編譯。唉,編譯下來的類里面的變量名等等都很混亂,看起來有點麻煩,沒辦法了,一直跟蹤運行下去吧,順騰摸瓜了。把幾個 Class反編譯下來后,找到了根源,在SmartUpload.class里,在upload函數下,找到這里 String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1); 經測試,這里是返回表單內容信息的String,看看他的構造函數,它沒有定義該String的Chartset,所以當然中文會出現亂碼了,用的是默認的西方ISO8859-1的編碼,所以中文在這里沒有得到正確轉換。為了方便起建,我在該類定義了一個靜態變量 : private static String charset = "iso8859-1"; 現寫個get set方法,在剛先的表單內容的String里改一下,使用四個參數的構造函數,最后那個參數為編碼字符集參數,寫成 String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1,charset); OK,在使用時,將SmartUpload構造出來時,再設置它將要使用的字符集,之后使用混合上傳,一切OK.
posted on 2008-07-29 12:37
姜大叔 閱讀(883)
評論(5) 編輯 收藏 所屬分類:
Java