轉:
FTP文件亂碼和傳輸模式解釋
版權聲明:大俠,在轉載時請注明出處,小弟不勝感激 https://blog.csdn.net/qq_33301113/article/details/55657151
- 問題現象
- 使用apache的FTP框架下載或者上傳中文文件出現亂碼
- 原因分析
- FTP協議里面,規定文件名編碼為iso-8859-1,所以目錄名或文件名需要轉碼。所以如果是中文需要用戶手動設置。
- 處理步驟
- 方法一:將中文的目錄或文件名轉為iso-8859-1編碼的字符。參考代碼:
String name="目錄名或文件名";
name=newString(name.getBytes("GBK"),"iso-8859-1");// 轉換后的目錄名或文件名
這是一般情況,如果 領導要求:所有 FTP上傳的文件(文件名)都要用 UTF-8 編碼,那么就需要將上面代碼中的 GBK 改成 UTF-8 ,也就是改成如下:
改為:
//上傳文件
if (!ftp.storeFile(new String(filename.getBytes("utf-8"),"iso-8859-1"), input)) { return result; }
- 方法二:在new FTPClient后,使用代碼ftpClient.setControlEncoding("utf-8");
該代碼的作用是將文件編碼由ISO-889-1轉為utf-8,也可以轉為其他的,例如GBK
- 效果
- 附錄
- FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式
- 使用的時候,建議使用ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
- 來定義傳輸模式,不容易出現內容被修改的情況。因為如果使用ASCII來傳輸的時候,出現過“回車”變成“換行”的情況,使內容發生改變。具體原因可以看看這兩種模式的詳解。
- 使用的時候,建議使用ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
- FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式