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

本篇內(nèi)容介紹了“FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼如何解決”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

主要從事網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開發(fā)、微網(wǎng)站、成都小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站設(shè)計制作、成都網(wǎng)站制作、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計、營銷、管理等多方位專業(yè)化運(yùn)作于一體,具備承接不同規(guī)模與類型的建設(shè)項目的能力。

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

使用類:

org.apache.commons.net.ftp.FTPClient

問題描述:

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

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

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

將中文的目錄或文件名轉(zhuǎn)為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服務(wù)器上,上傳的文件中文是正常的,不是亂碼,我當(dāng)時以為中文問題就解決了,但是測試部的同事在將文件上傳到他們搭建的FTP服務(wù)器上時,文件中文路徑仍然是亂碼,所以上述的解決方法是錯誤的。

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

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

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

圖1:FileZilla配置信息

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

圖2:FileZilla連接時信息

從圖2中我們可以看到原來它向服務(wù)器發(fā)送了OPTS UTF8 ON命令,來開啟服務(wù)器對UTF-8的支持。所以我們也可以仿照FileZilla那樣向服務(wù)器發(fā)送該命令。如果服務(wù)器支持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"))) {// 開啟服務(wù)器對UTF-8的支持,如果服務(wù)器支持就用UTF-8編碼,否則就使用本地編碼(GBK).

LOCAL_CHARSET = "UTF-8";

}

ftpClient.setControlEncoding(LOCAL_CHARSET);ftpClient.enterLocalPassiveMode();// 設(shè)置被動模式ftpClient.setFileType(getTransforModule());// 設(shè)置傳輸?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");}

}

上傳文件時,文件名稱需要做編碼轉(zhuǎn)換

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

“FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼如何解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)頁題目:FtpClient在創(chuàng)建中文目錄文件名中的中文顯示亂碼如何解決
網(wǎng)站地址:http://muchs.cn/article10/ippedo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、搜索引擎優(yōu)化、動態(tài)網(wǎng)站域名注冊、軟件開發(fā)全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化