問題描述:
在服務器上用FileZilla Server建了個FTP服務器,本機程序中使用 apache.commons.net 包中的 ftp.FTPClient 類上傳下載文件,文件上傳下載後的文件名的顯示都木有問題,就是在程序中使用listNames(),或者listFiles()再獲取文件名,中文的文件名就會亂碼,就像“???.png”這個樣子。
解決方法:
在網上搜了一通,說是編碼不匹配,要獲取文件名之後,用name=new String(name.getBytes("UTF-8"),"GBK");這樣的方式,當然並不一定就是這兩種編碼,順序也不一定。但是嘗試了之後,還是沒用。
後來終於找到了一個解釋清楚的:http://lioncn.blog.51cto.com/1557898/432835;原因是服務器端字符集和客戶端字符集不匹配,FileZilla Server默認使用utf-8,而我們的操作系統一般都是中文的,默認字符集是gbk,因此就不行了。有建議使用FileZilla Server的某個特殊版或者打補丁,最簡便的方法是給ftp服務器發送一個命令“opts utf8 off”,就一切ok了。
在客戶端上測試可行,但是程序當中怎麼做呢,調用FTPClient的doCommand("opts", "utf8 off");即可,注意檢查是否執行成功,調用之前要先登錄哦。