天天看點

ChannelSftp下載下傳檔案含有中文名稱的解決辦法

問題描述

項目裡有一功能,要從FTP上上傳或者下載下傳檔案,使用的是ChannelSftp來完成任務,jar包為com.jcraft.jsch_0.1.31.jar,一直運作穩定,直到有一天下載下傳一個中文名稱的檔案卻發現檔案大小為0KB。

問題分析

  1. 嘗試把檔案名稱各種編碼再傳參不好使。
  2. 檢視源碼發現根本沒有指定檔案編碼的方法。
  3. 去官網下載下傳一個最新的jar包jsch-0.1.54.jar,檢視源碼發現有了setFilenameEncoding()這個方法,估計是老版本的jar的bug被修複了。然而進一步檢視這個方法
    ChannelSftp下載下傳檔案含有中文名稱的解決辦法
    源碼表明如果使用的版本在3-5的jar包隻能用utf-8編碼,不能改。此時如果想修改編碼可以用反射修改server_version字段的值,使其滿足else下方的條件。

問題解決

換個新jar包,不用設定setFilenameEncoding()。