Windows文件上传到Linux
2009.11.02. 10:37 Article by 老翅 Posted in 学习 - 3 CommentsAuthor's Website: http://www.nowings.com
接上篇。Apache配置好了之后,尝试把网页文件上传到服务器,简单的把WWW服务架起来。蛮以为简单的事情,结果问题来了。
同事编辑的网页是使用的中文名称,比如"网站首页.html"。而服务器在架设之初,我使用的编码格式是en_US.UTF-8,可以支持汉字。所以没有多想,用FTP工具将其上传,且在FTP工具显示正常。打开浏览器测试,失败。
大概的心里有数了,用Putty连接到服务器查看了一下,乱码。
rar格式的比较好办,rar 3.6以后版本对unicode的支持更加智能化。 Linux下使用rar进行压缩/解压缩时,可以使用-scuc,来强制指定文件名用unicode编码进行压缩和解压缩。 对于zip格式的需要注意,Windows下创建的zip压缩包默认是使用的本地编码。即如果是简体中文的Win系统,则会使用GBK来存储文件名。此时,在Linux下解压缩包含中文文件名的压缩包时,需要在命令行使用参数-O cp936。 同理,在Windows下如果用WinRAR来解压缩zip文件倒是没有这个限制,WinRAR会自动检测文件名的编码方式。 不建议在Linux下使用gz/tar格式的压缩文件来给Windows机器共享文件,如果gz/tar压缩包中包含中文文件名会导致winrar解压缩包含中文文件名的文件时失败! --来自这里 |
ftp乱码的现象和原因:访问ftp,遇到中文文件名出现乱码。由于在FAT和NTFS文件系统中,中文是直接按照操作系统所使用的编码方式存储的,中文系统通常是gbk编码。针对不同的ftp客户端软件,有的ftp服务器端软件无法将文件系统中的编码,转换成客户端软件所使用的编码,于是就出现了乱码。--来自这里
|
首先是在Windows上用Filezilla连接Ubuntu时看到的中文文件名全是乱码,但是用Putty通过SSH连接Ubuntu却是正常的(原先是乱码,后来改设置为UTF-8编码就好了,不过Filezilla没有类似的设置可改)。如果用Filezilla向Ubuntu上传本地的中文文件,则在Filezilla里看到Remote端的文件名是正确的,但在Putty里看到是乱码。 然后更严重的问题是:当我在Ubuntu上用Filezilla的SFTP从FreeBSD上下载文件时发现那些中文文件名都成了乱码。只好改用tar/tar.gz再试,结果还是乱。最后问了Google,但是结果并不理想,试过很多方法都无法解决,甚至为此特地在FreeBSD和Ubuntu上都装了p7zip试验,也还是不行。 折腾了好几天之后,我才想到应该研究一下几个系统上的locale设置究竟是如何的--坦白说,要不是因为搜到的资料里有提到这方面,我从前还真没注意到这回事。在FreeBSD和Ubuntu上分别运行了locale命令检查的结果是: FreeBSD的LC_ALL为"C",即"POSIX"的别名,似乎是一种无固定编码的方案,或者可以认为就是本地编码,默认的设置。 这样就好理解了,Filezilla不改变编码方式,所以当Remote端与本机的编码不一致时,必然乱码。所以在Windows上用Filezilla连接Ubuntu看到乱码,而我的Putty因为是设置为UTF-8编码,所以看到的是正确的--因为Ubuntu一端是UTF-8。而如果用Filezilla上传中文文件,则因为Windows是本地编码,所以上传以后仍然为本地编码(GB系),而Ubuntu是UTF-8所以是乱码。 FreeBSD那边的问题也是一样的,因为那些文件都是以前从Windows上传上去的,用的都是GB系编码,而早年我用Putty都是用默认的本地编码方案,所以一直没有发现问题。这样的话,因为FreeBSD是本地编码,与Ubuntu的UTF-8不一致,所以怎么弄都是乱码。 但是据说用7zip这样的工具打包以后是可以解决这样的编码不一致问题的,我试了却没有成功。后来才想明白,因为7zip是根据系统的locale设置来对文件名进行相应的处理,因为原来我处理的时候文件名是GB系的编码,而系统是设置为UTF-8,所以总也不对。 |
经过对上面文字的研究,大概了解了是怎么回事。但是处理起来还是不是太容易。用了各种方法都未能成功。
但是,试着在浏览器里打开时,一切正常。
杯具
[盖楼]
许久没有更新的乐为感谢的老翅的奉献,或许是小奈天生的悲观思想,仿佛在乐为创立时,我就预感到,现在如此活跃的乐为也许在某一天会突然暗淡了下来,大家都会重新忙自己的事,重新,回归自己的轨道。仿佛,乐为,从来就不曾存在过~~它,也会像烟花一样~·绚烂一时,归于平静么。。。
[盖楼]
太专业了,准备给老翅建个专栏~
[盖楼]