久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

跨平臺(Linux&Windows)中文文件名亂碼的解決 - linux - QT開發(fā)愛好者

 tcwl123 2010-11-17
跨平臺(Linux&Windows)中文文件名亂碼的解決

從網(wǎng)路上搜了很久,,都是沒有能夠把ubuntu下用gftp的中文亂碼問題解決的,,這篇文章雖然廢話但思路比較清晰,容易了解問題所在及如何解決,。就轉(zhuǎn)載于此,。

事情的起因是這樣的~~

在很久很久以前——大約是2年多年前,我整了一臺P3的機(jī)器裝了FreeBSD 6.2做服務(wù)器,,經(jīng)常用Filezilla的SFTP往里面?zhèn)浞荼镜氐奈募?,?dāng)然也包括一些中文名的文件。一切都很正常,,上傳下載都沒問題,,即使是用 SSH連過去用Tar打包再Gzip壓縮以后下載下來解開都沒問題。

但是好日子在前幾天到頭了,。我前一陣又弄了一臺P3的機(jī)器裝了Ubuntu 7.10,。問題出現(xiàn)了:

 

首先是在Windows上用Filezilla連接Ubuntu時看到的中文文件名全是亂碼,但是用Putty通過SSH連接Ubuntu卻是正常 的(原先是亂碼,后來改設(shè)置為UTF-8編碼就好了,,不過Filezilla沒有類似的設(shè)置可改),。如果用Filezilla向Ubuntu上傳本地的中 文文件,則在Filezilla里看到Remote端的文件名是正確的,,但在Putty里看到是亂碼,。

然后更嚴(yán)重的問題是:當(dāng)我在Ubuntu上用Filezilla的SFTP從FreeBSD上下載文件時發(fā)現(xiàn)那些中文文件名都成了亂碼。只好改用 tar/tar.gz再試,,結(jié)果還是亂,。最后問了Google,但是結(jié)果并不理想,,試過很多方法都無法解決,,甚至為此特地在FreeBSD和Ubuntu 上都裝了p7zip試驗,也還是不行,。

折騰了好幾天之后,,我才想到應(yīng)該研究一下幾個系統(tǒng)上的locale設(shè)置究竟是如何的——坦白說,要不是因為搜到的資料里有提到這方面,,我從前還真沒注意到這回事,。在FreeBSD和Ubuntu上分別運行了locale命令檢查的結(jié)果是:

FreeBSD的LC_ALL為“C”,即”POSIX”的別名,,似乎是一種無固定編碼的方案,,或者可以認(rèn)為就是本地編碼,默認(rèn)的設(shè)置,。
Ubuntu的LC_ALL為“zh_CN.UTF-8”,,這個是我設(shè)置的。
Windows不必說了,,肯定是本地編碼——只是我沒有想到的是,,公司里用的英文版Windows居然也是本地編碼,我一直以為是Unicode的,,看來是為了保持兼容,。

這樣就好理解了,F(xiàn)ilezilla不改變編碼方式,,所以當(dāng)Remote端與本機(jī)的編碼不一致時,,必然亂碼。所以在Windows上用 Filezilla連接Ubuntu看到亂碼,,而我的Putty因為是設(shè)置為UTF-8編碼,,所以看到的是正確的——因為Ubuntu一端是UTF-8。 而如果用Filezilla上傳中文文件,,則因為Windows是本地編碼,,所以上傳以后仍然為本地編碼(GB系),,而Ubuntu是UTF-8所以是亂 碼。

FreeBSD那邊的問題也是一樣的,,因為那些文件都是以前從Windows上傳上去的,,用的都是GB系編碼,而早年我用Putty都是用默認(rèn)的本 地編碼方案,,所以一直沒有發(fā)現(xiàn)問題,。這樣的話,因為FreeBSD是本地編碼,,與Ubuntu的UTF-8不一致,,所以怎么弄都是亂碼

但是據(jù)說用7zip這樣的工具打包以后是可以解決這樣的編碼不一致問題的,,我試了卻沒有成功,。后來才想明白,因為7zip是根據(jù)系統(tǒng)的locale設(shè)置來對文件名進(jìn)行相應(yīng)的處理,,因為原來我處理的時候文件名是GB系的編碼,,而系統(tǒng)是設(shè)置為UTF-8,所以總也不對,。

最后的解決方案是:

在ubuntu上用以下命令:

export LC_ALL="zh_CN.GBK"
scp raptor@freebsdserver:/home/raptor/myfiles/*.* .
export LC_ALL="zh_CN.UTF-8"
convmv -f GBK -t UTF-8 --notest *.*

原理就是先把ubuntu的locale改為GBK,,然后用SSH COPY文件過來,再改locale為UTF-8,,然后用convmv來轉(zhuǎn)換文件名的編碼,。

不過經(jīng)過試驗表明,不改變locale直接scp也是可以的,,因為scp并不會改變文件的編碼方式,,不過改了locale以后便于在轉(zhuǎn)編碼之前檢查scp過來的內(nèi)容(否則scp過來是亂碼,要到轉(zhuǎn)編碼后才正常),。

這樣做的結(jié)果就是,,這些文件在ubuntu上是正常了,以后要再弄回windows就比較麻煩,,需要用7zip之類的工具打包下載再解開,。

歸根到底這些問題都是因為該死的Windows用本地編碼來記錄文件名,Unicode化做得不夠徹底,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多