Java Web文件下載2——文件下載亂碼處理

這是我在導出excel文件供用戶下載時遇到的:

流程:
1、文件生成,文件全名名由路徑加文件名構成,路徑配置在數據庫中動態讀取,名稱由時間加漢字構成。生成 的文件將存放在數據庫中配置的路徑中
2、前臺頁面顯示出文件列表,點擊下載,將文件名傳到後臺去,後臺通過讀取數據庫配置的路徑加上傳過來的 文件名去尋找該文件
3、從指定文件中讀取數據,設置相關信息,完成下載

 

中文亂碼處理:
1、生成文件系統的實體文件時,文件名不存放漢字,而是將文件名(不用包括路徑)轉成Unicode 字符,即,使用URLEncoder.encode("文件名","UTF-8"),然後再去由該名稱生成實體文件,當然這樣的文件名在服務器上不解碼是看不懂的,之所以這麼做是爲了防止有的服務器對中文編碼不同,直接存放通用的Unicode碼,解決後顧之憂。當然沒有加密過的原來的文件名,也就是大家都認識的文件名還是要保存起來的,比如存到數據庫中去,因爲頁面上顯示的是要能看懂的!
2、前臺顯示文件名列表,將要下載的文件名傳到後臺去。傳之前要通過js進行加密操作,同樣轉換成unicode字 符,傳到後臺之後,後臺解密,可以得到正確的中文文件名稱,不過此時得到的文件名沒什麼用,權當看一看文件名對不對吧!因爲這時候通過這個文件全名來到服務器上讀取文件肯定會報錯的,FileNotFoundException,當然,因爲你得先把它URLEncoder.encode("文件名","UTF-8"),也就是加密成Unicode碼,然後拼上路徑,這樣才能在服務器中找到對應的文件!
3、當然文件下載時用戶看到的下載列表中你不能直接給Unicode碼組成的文件名也不能是亂碼,但是幸好,程序會自動處理這一點,你直接response.setHeader("Content-Disposition","attachment;filename="+fileName)就行,其中的fileName是Unicode碼的文件名,瀏覽器會自動給你轉換好的!


中文亂碼問題太多了,而且很煩,一個很好的原則就是,不要講中文名稱存放到服務器上,而是用通用的字符代替,你如這裏講的Unicode字符,或者還有一種辦法,通過自己定義一種規則,將中文映射成英文存放到服務器上,然後下載的時候再將英文映射成對應的中問,這個過程可以藉助Map來做,這樣也能很好的防止亂碼問題!

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