一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統(tǒng)進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統(tǒng) - Linux - FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼解決方法

FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼解決方法

2019-10-31 21:07linux教程網(wǎng) Linux

這篇文章主要為大家介紹了FtpClient在創(chuàng)建中文目錄、上傳中文文件名時,目錄名及文件名中的中文顯示亂碼解決方法,需要的朋友可以參考下

最近在做文件服務器的相關東西,在原有的磁盤存儲的基礎上,增加了Ftp的存儲方式,客戶端選用的是Apache的FtpClient。  今天在測試的時候,發(fā)現(xiàn)中文的路徑后者文件名不支持,查閱了相關資料后終于找到了解決的方法。

  使用類:

  org.apache.commons.net.ftp.FTPClient

  問題描述:

  創(chuàng)建中文目錄、上傳中文文件名時,目錄名及文件名中的中文顯示亂碼解決方法:

  在網(wǎng)上Google了一些資料, FTP協(xié)議里面,規(guī)定文件名編碼為iso-8859-1,所以目錄名或文件名需要轉碼。

  所以網(wǎng)上很多人的解決方法為:

  將中文的目錄或文件名轉為iso-8859-1編碼的字符。參考代碼:

  String name="目錄名或文件名";

  name=new String(name.getBytes("GBK"),"iso-8859-1");很多人改為上述操作后,發(fā)現(xiàn)上傳后中文不再亂碼了,就以為解決了問題還有人處理方法為:

  ftpClient.setControlEncoding("GBK");

  FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);conf.setServerLanguageCode("zh");

  上述的處理方法,我都試過,發(fā)現(xiàn)在我自己搭建的FTP服務器上,上傳的文件中文是正常的,不是亂碼,我當時以為中文問題就解決了,但是測試部的同事在將文件上傳到他們搭建的FTP服務器上時,文件中文路徑仍然是亂碼,所以上述的解決方法是錯誤的。

  上面的方法之所以錯誤的原因是因為是沒有考慮ftp服務器的編碼格式。我搭建的Ftp服務器(windows2003 server)支持GBK編碼方式,所以上述的解決方法可以,但是測試部的同事搭建的Ftp服務器(serv-u)是支持UTF-8格式的,所以此時在客戶端的編碼方式是GBK的,而搭設的ftp服務器中的設置就已經(jīng)是utf-8的編碼,所以肯定還是會出現(xiàn)亂碼的問題。

  那么正確的解決方法時是什么呢,我們可以仿照FlashFXP、FileZilla等ftp 客戶端連接工具,看看他們是如何實現(xiàn)的,下面的兩張圖就是FileZilla的配置信息和連接時的命令信息。

FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼解決方法

  圖1:FileZilla配置信息

FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼解決方法

  圖2:FileZilla連接時信息

  從圖2中我們可以看到原來它向服務器發(fā)送了OPTS UTF8 ON命令,來開啟服務器對UTF-8的支持。所以我們也可以仿照FileZilla那樣向服務器發(fā)送該命令。如果服務器支持UTF-8我們就用UTTF-8,否則我們就用本地編碼(GBK)來處理中文文件名。

  下面是Java代碼:

  /** 本地字符編碼 */

  private static String LOCAL_CHARSET = "GBK";// FTP協(xié)議里面,規(guī)定文件名編碼為iso-8859-1private static String SERVER_CHARSET = "ISO-8859-1";private void connectFtpServer() {

  if (ftpClient == null) {

  ftpClient = new FTPClient();

  }

  if (ftpClient.isConnected()) {

  return;

  }

  String host = getConfigValue(ADDRESS);

  int port = Integer.valueOf(getConfigValue(PORT));String user = getConfigValue(USER);

  String password = getConfigValue(PASSWORD);try {

  ftpClient.connect(host, port);

  if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {if (ftpClient.login(user, password)) {

  if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {// 開啟服務器對UTF-8的支持,如果服務器支持就用UTF-8編碼,否則就使用本地編碼(GBK).

  LOCAL_CHARSET = "UTF-8";

  }

  ftpClient.setControlEncoding(LOCAL_CHARSET);ftpClient.enterLocalPassiveMode();// 設置被動模式ftpClient.setFileType(getTransforModule());// 設置傳輸?shù)哪J絩eturn;

  } else {

  throw new FileStorageException(

  "Connet ftpServer error! Please check user or password");}

  }

  } catch (IOException e) {

  disConnectServer();

  throw new FileStorageException(

  "Connet ftpServer error! Please check the Configuration");}

  }

  上傳文件時,文件名稱需要做編碼轉換

  fileName = new String(fileName.getBytes(LOCAL_CHARSET),SERVER_CHARSET);

  通過上述方法,就能解決了中文亂碼的問題。謝謝閱讀,希望能幫到大家,請繼續(xù)關注服務器之家,我們會努力分享更多優(yōu)秀的文章。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品国产一区二区三区在 | 日韩日日日 | 9色视频在线观看 | 国产精品反差婊在线观看 | 日本一卡二卡3卡四卡网站精品 | 日韩亚洲国产激情在线观看 | 97精品国产自在现线免费观看 | 国产一级片免费观看 | 久久黄色免费 | 精品亚洲永久免费精品 | 香蕉久久夜色精品国产尤物 | yy8090韩国日本三理论免费 | 日本一区三区 | 日本一区二区精品88 | 国产精品午夜性视频网站 | 成人区精品一区二区毛片不卡 | 赤坂丽女医bd无删减在线观看 | 日本制服丝袜 | 三级午夜宅宅伦不卡在线 | 日本一区二区三区在线 观看网站 | 欧美日韩一区二区三区久久 | 99国产国人青青视频在线观看 | 风间由美vec399 | 免费aⅴ在线 | 亚洲精品在线网址 | 久久成人a毛片免费观看网站 | 色四虎| 亚洲电影第1页 | 欧美无专区| 亚洲精品福利一区二区在线观看 | 四虎地址8848aa4hc44四虎 四虎成人永久地址 | 国外欧美一区另类中文字幕 | 日韩免费视频播播 | 国产精品国产三级在线专区 | 国产欧美一区二区精品性色 | 天美传媒传媒免费观看 | 久久伊人影视 | 夫妻性生活一级黄色片 | 欧美日韩一区二区中文字幕视频 | 久久精选视频 | 桃色公寓 |