對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2010/8/1 8:40:30
大家在使用Commons FileUpload的時候,應該不少人會碰到中文檔名上傳變成亂碼的問題吧!?
這很明顯得又是Java編碼、Client編碼、Server環境編碼中間轉換的問題!
不能否認,Java上這類的問題還真的蠻多低,這裡來跟大家說一下怎麼解決!
首先,必須先跟大家說明的是,如果request.getCharacterEncoding沒有設定(也就是request.getCharacterEncoding() == null)的話,系統會用Server編碼來處理。
而我們一般來說不會用這樣的編碼來做前端,此時上傳的檔案名稱一定就會變成亂碼。
所以如果要上傳檔案可以使用中文檔名的話,有以下幾種方案:
1.讓你的Server環境和你開發出來的編碼相同!
也就是說,如果你都是使用UTF-8編碼開發的話,就讓你的系統環境也是UTF-8吧!
(謎:不過MS系統好像沒辦法設定底層編碼喔!?
2.看你的Server系統是啥編碼,改用那個編碼開發!
MS的系統底層一般來說是MS950,也就是說你所有開發都採行MS950編碼,也就可以了!
(謎:MS950可以多語系嗎?怎麼有種自廢武功的感覺
3.把getCharacterEncoding搞定就好啦!
如果上述兩個方法都不行(這不是行不行的問題吧!?是好不好的問題吧!?
)的話,那我們就讓FileUpload的CharacterEncoding正確不就好了嗎!?
只要在接收上傳檔案的頁面上加上這樣就搞定了!
(謎:冷日只要是Java開發的東西,都一定採UTF-8編碼,這不正是Java的本意嗎!?
希望這樣可以幫上大家解決中文檔名上傳的問題。
PS:這裡有參考文件Createor2檔案上傳元件-上傳中文檔名解法
這很明顯得又是Java編碼、Client編碼、Server環境編碼中間轉換的問題!
不能否認,Java上這類的問題還真的蠻多低,這裡來跟大家說一下怎麼解決!
首先,必須先跟大家說明的是,如果request.getCharacterEncoding沒有設定(也就是request.getCharacterEncoding() == null)的話,系統會用Server編碼來處理。
而我們一般來說不會用這樣的編碼來做前端,此時上傳的檔案名稱一定就會變成亂碼。
所以如果要上傳檔案可以使用中文檔名的話,有以下幾種方案:
1.讓你的Server環境和你開發出來的編碼相同!
也就是說,如果你都是使用UTF-8編碼開發的話,就讓你的系統環境也是UTF-8吧!
(謎:不過MS系統好像沒辦法設定底層編碼喔!?

2.看你的Server系統是啥編碼,改用那個編碼開發!
MS的系統底層一般來說是MS950,也就是說你所有開發都採行MS950編碼,也就可以了!
(謎:MS950可以多語系嗎?怎麼有種自廢武功的感覺

3.把getCharacterEncoding搞定就好啦!
如果上述兩個方法都不行(這不是行不行的問題吧!?是好不好的問題吧!?

只要在接收上傳檔案的頁面上加上
<% request.setCharacterEncoding("UTF-8"); %>
(謎:冷日只要是Java開發的東西,都一定採UTF-8編碼,這不正是Java的本意嗎!?

希望這樣可以幫上大家解決中文檔名上傳的問題。
PS:這裡有參考文件Createor2檔案上傳元件-上傳中文檔名解法