問題描述
項目裡有一功能,要從FTP上上傳或者下載下傳檔案,使用的是ChannelSftp來完成任務,jar包為com.jcraft.jsch_0.1.31.jar,一直運作穩定,直到有一天下載下傳一個中文名稱的檔案卻發現檔案大小為0KB。
問題分析
- 嘗試把檔案名稱各種編碼再傳參不好使。
- 檢視源碼發現根本沒有指定檔案編碼的方法。
- 去官網下載下傳一個最新的jar包jsch-0.1.54.jar,檢視源碼發現有了setFilenameEncoding()這個方法,估計是老版本的jar的bug被修複了。然而進一步檢視這個方法 源碼表明如果使用的版本在3-5的jar包隻能用utf-8編碼,不能改。此時如果想修改編碼可以用反射修改server_version字段的值,使其滿足else下方的條件。
ChannelSftp下載下傳檔案含有中文名稱的解決辦法
問題解決
換個新jar包,不用設定setFilenameEncoding()。